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 件のコメント:
コメントを投稿