TestCaseでプライベートなメソッドが呼べない
XcodeでUnitTestをする際、テスト対象クラスの.hファイルに宣言していないメソッド、いわゆるプライベートメソッドをテストしたくなります。 むしろ、そいつらを重点的にテストしたい!でも、TestCaseクラスに、テスト対象クラスの.hファイルをimportしただけだと、コンパイルエラーになって呼べません。
しょうがないから.hにプライベートなメソッドの宣言も書いとくか〜
でも、余計なメソッドを外部に公開したくないしな〜
とか考えてたんですが、ソースを汚さない良い解決方法がありました。
TestCaseでプライベートなメソッドを呼ぶ方法
TestCaseクラスの.mファイルで、テスト対象クラスのカテゴリを定義して、その中に使いたいプライベートメソッドを宣言してやります。すると、問題なく呼び出せるようになりました。
#import "MyClassTests.h" #import "MyClass.h" // MyClass.hに宣言してないメソッドのカテゴリ @interface MyClass (Test) - (void)privateMethod; // MyClass.hに宣言してないメソッド @end /// MyClassのテスト @implementation MyClassTests /// privateMethodのテスト - (void)testPrivateMethod { MyClass* obj = [[MyClass alloc] init]; [obj privateMethod]; // エラーにならない! ... } @end
Objective-Cの特徴を活かした解決方法ですね。
0 件のコメント:
コメントを投稿