TDD&CI事始め

小さなプロジェクトで、きちんとTDDとCIをしてみよう
<前提>
・GITサーバーはある
・MacでXcodeも用意済み
・Macのサーバーもあって、Jenkinsセットアップ済み

gitサーバー上のリポジトリディレクトリで、

% mkdir TemperatureConverter.git
% cd TemperatureConverter.git
% git init --bare .

これで、gitサーバーは、受け入れ完了

開発Mac上で、Xcodeを使って、TemperatureConverterを作る。
まずは、CocoaPodは、入れないでおく。
この時に、”Include Unit Tests”と”Include UI Tests”にチェックを入れておく。
(UI Testsは使うかどうかわからないけど・・・)

最後に、開発PC上にgitリポジトリを作るにチェックが入っていることを確認して、”Create”をPush!

テストが何もないとよくわからないので、TemperatureCOnverterTests下にあるTemperatureConverterTests.mをちょっとだけ、修正(何もなくてもエラーにする)

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
  XCTAssertTrue(TRUE);
}

schemeを[Product]-[Scheme]-[Manage schemes…]で共有設定にする。
(今使っているOSX Serverは、10.10でUITestは、10.11以降のサポートなので、必要に応じて、UITestはDisableに)
そしたら、commitしてgitに追加。

いつもSourceTreeを使っているので、作ったWorkspaceをSourceTreeへ追加。
いつもGitFlowを使っているので、この段階で、GitFlowをインストール。
次に、サーバーと関連付けて、pushしておく。

次に、Jenkinsサーバーでgitから取得する設定
新しいItemでJobを作成し、上記gitから取得するようにする。取得するTagはDevelopにしておく。(本当は、masterかも??)
一度、Jobを実行してみて、正しく取得できているか確認して、完了。

次は、XCodeでのビルド設定
JenkinsにXCodeプラグインを入れておくと、簡単(というか、入れましょう)
BuildTriggersは、置いておいて、
Build-Add build stepでXcodeを選択して、Xcodeを使用したbuildを設定。

ビルドの次のステップとして、testを実行するアクションを作成する。

うまく動くはずなんだけど、なぜかエラーとなる。
→ プロジェクトの動作環境を10.11にしているのに、サーバーが10.10だったからでした。

これで、ビルドまで通ることを確認できた。

お試し中のAppCodeを使って、どれくらいコード推測が有効か、見てみよう。

Continuous integration

Botを作成すると指定したサーバーでテストが行われるようなんだけど、ローカルのGitにコミットしてもそのコードが使用されない。
当たり前といえば当たり前だけど、じゃぁどうやって??

都度都度、サーバーにアクセスして・・・なんて、ありえないし

よくよくメニューを見たら、Pushがありました・・・

これで、ナイトビルドに新しいコードが反映されているか見てみよう Continue reading

UIViewのTDD

以前は、自分でViewControllerをAllocして・・・ってやってたけど、Storyboardが入って少し変わった

  UIStoryboard* story = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  ViewController* viewCon = [story instantiateViewControllerWithIdentifier:@"ViewID1"];

とかして、ViewControllerを取得する必要あり。
ViewController中のviewにアクセスして、ロードさせる必要があるのは、前と変わらないらしい

  [viewCon view]; // access for test
  UILabel* label = viewCon.messageLabel;
  
  XCTAssertNotNil(label);

OSX Server

いつの間にか、サーバー上のXCodeが更新されたらしい。
そのためか、OSX Server上の、XCodeサービスが停止されてた。

再指定しても、”対応してません”みたいなメッセージが出て、びッくり。
Googleしたりしてもそれらしいものはヒットしないし、
そもそもXCode7からXCode7.0.1のアップデートでなんでNGになるのか意味不明だし
ということで、しばし検索しまくってから、”再起動してみよう”という結論(?)に。 Continue reading

Sample Application for continuous integration

とりあえず、自動テストも含めたCIしたいので、そのためのアプリ仕様とテスト仕様を決めよう。

  • アプリ仕様
  • ビルドするのは、iOS App
  • 画面に、Hello World!を表示する
  • テスト仕様
    • Hello World!が表示されていることを確認

    CocoaPodとかも使いたいけど、いろいろ混ざって動かなくなるのが嫌なのでまずは、非常にシンプルなパターンからやってみよう Continue reading

    Mac OS X server setup for Continuous integration

    Mac OS X Serverをセットアップ

    と言っても、以下をやっただけ。

    • Server アプリ起動
    • XcodeサービスをONに(インストールされているXcodeを指定する必要あり)
    • お試しようにGitリポジトリも作成
    • 開発チームを追加(このときにApple Dev Accountを指定)

    自分がやったときは、ONにしてしばらくしないと、XCodeがサーバーを認識してくれなかった。

    認識後は、要求されるがままにパスワード等を入れれば、目の前にXcodeでコミットして、Pushすると、サーバー上のGitにも登録されるのが見えるはず。

    Continuous Integration

    Cocoa AppとiOS App のCI環境を作っていく作業のメモ

    # どこまで挫けずにできるのかなぁ〜

    (おそらく)用意するもの

    • CI用 Mac OS X Server (Yosemite)
    • 作業用 Mac OS X (Yosemite)

    もう、El Capitanもリリースされてるけど、使っているHHKのドライバが対応していないから、当面はYosemiteで。

    参考書