Objective-C勉強会@東京 – PARTAKE に参加して、iOSのユニットテストについて話をして来ました。

スライドは上記に置いてあります。

そこまで、それぞれに詳しく扱ってない感じで、ロジックテストとアプリケーションテストの違いや、
どういうツールがあるのかやデータベースを使った時にテストの仕方等の紹介な感じです。

xctool はiOSのテストをCLIで実行するのにとても便利でよい感じなのでお勧めです。

スライド内にひっそり(note)とCocoaPodsと xctool の相性がまだ良くないことが書かれていますが、
一度ビルドしないと、 xctool からテストを動かすとエラーになる現象があります。

ld: library not found for -lPods

これは、”Find Implicit Dependencies”の挙動が上手く動いていないのが原因みたいで、手動でビルドの設定にCococPodsの静的ライブラリをビルドするTargetを追加すれば動作するようになります。

BuildのTargetを CocoaPods -> Main -> Test に並べてあげると解決します。
(そのうちxctool側で対応しそうな気がする)

一度でもビルドしてあれば、上記のエラーはでなくなるので気づきにくいですが、Travis CIのように毎回クリーンな環境で実行される場合はエラーが出ます。
以下のプロジェクトではCocoaPods + xctool + Travis CIでテストを動かしています。


以下メモ

Objective-Cの概要 – @akuraru

Objective-Cとは

  • Cの完全上位互換
  • 動的型付きオブジェクト指向
  • メッセージ式

他の言語との関わり

  • C言語
  • Smalltack のようにかけるC言語

特徴

  • メッセージ式
  • ARC
  • C言語と同等の速度
  • カテゴリ

メッセージ式

  • あるClassにxxというmethodがある
  • xxというmethodがあるClass

同じメッセージ

ARC

  • C言語と同様にメモリ管理は手動で行わないといけなくなった
  • コンパイラが自動でメモリ管理に関するコードを追加する
  • ガーベッジコレクションじゃない

C言語と同等の速度

  • ClassはC言語の機能のラップ
  • メソッドは過疎数の名前空間が分かれている(名前空間を分けている)
  • 本来に速度が必要ならばC言語で実装すると高速

カテゴリ

  • 実装を複数のファイルに分割する機能
  • NSObjectにも機能が追加できる
  • 強力な分リスクがある機能

GDBでObjective-Cの中身を見る

  • GDBでObjective-Cのアセンブラ
  • メッセージ式はobjc_msgを呼び出してる
  • Objective-C ではメソッドを呼ぶときに self, _cmd, パラメータ1,2…と渡される
  • NSStringはCFConstStringReference になってる

LLVMでアセンブラ

  • clang -emit-llvm -S でllvmアセンブリな形式で見られる
    • 直接アセンブラを見るより楽
  • どういう引数を渡しているかがわかりやすい

おわり

  • 来月ぐらいにもう一度やるそうです。