ぽんぽこ日記

プログラミング、読書、日々の生活

OCUnitでテストメソッドを選択的に実行する

小ネタですが。。

本来のユニットテストの趣旨とはことなるが、動作がよくわからないクラスやAPIを試してみるときなど、試行錯誤しながらコードを書いていくときに、テストプログラムを書いて試してみては、書き換えてまた別の方法を試したりと、選択的にテストコードを実行したいときがあると思う。

そんなとき、自分の場合MacOSX/iOSだとOCUnitを使うことが多いのだが、すべてのテストメソッドを動かさずに、選択的に一部のテストメソッドだけを実行したい場合、動かしたくないテストメソッドをコメントアウトしたりしていた。いくら何でもこれは非生産的なので、少し調べてみたところ、XCode組み込みのOCUnitテストランナーは各SenTest派生クラスのdefaultTestSuiteを呼び出して、このテストスイートを実行しているらしく、defaultTestSuiteをオーバーライドしてやればいいことがわかった。

こんな感じ:

@implementation HogeTest
+ (id)defaultTestSuite {

  SenTestSuite *suite= [SenTestSuite testSuiteWithName:@"My tests"];
  
  [suite addTest: [HogeTest testCaseWithSelector:@selector(test01)]];
  return  suite;
}

とはいえ、Xcode標準のテストランナーはビルドプロセスとして実行されるので、デバッガにかけられなかったりといろいろ不満もあるので最終的には独自のテストランナーを書くべきなのだが。。。

関連記事
http://life.ponpoko.tv/?p=66