私はプライベート(これはインタフェース・ヘッダ内で宣言されていない)School
クラスのm個のファイルで定義された方法-(void) doSomething
があるとSchool
クラスのユニット・テスト・ケース:理由
@interface SchoolTest : XCTestCase
@end
@implementation SchoolTest
- (void)testExample {
id mySchoolMock = [OCMockObject partialMockForObject:[School new]];
// I know I can't access '-(void)doSomething' since it is a private method
}
@end
私は通常、このプライベートメソッドにアクセスすることはできません知っています。私はしかし、もし以下のように私のテストクラスで-(void) doSomething
を再宣言:
@interface SchoolTest : XCTestCase
// re-declare it in my test class
-(void) doSomething
@end
@implementation SchoolTest
- (void)testExample {
id mySchoolMock = [OCMockObject partialMockForObject:[School new]];
// Now I can access '-(void)doSomething'!!! Why now I can access the private method in `mySchool` Instance in my test class ?
[mySchoolMock doSomething];
}
@end
なぜ上記のように、私はmySchool
インスタンスにプライベートメソッドSchool
クラスのにアクセスすることができますか?これの背後にある目的とは何か?
(私はthis questionからの回答を読んでいるので、私はこれをやっているが、我々はそれを行うことができますなぜ私は理解していない?理論が背後に何ですか?)
ObjCにはプライベートメソッドというものはありません。コンパイラが特定の観点から見ることができないふりをする方法しかありません。あなたのコードが少なくとも 'doSomething'が未知のセレクタであるという警告を引き起こさない理由は不明です。あなたのコードはARCを使用していませんか? – Avi
@Avi、はい、ARCが使用されます。 –