2016-03-28 4 views
0

私はOCMockを使ってプロトコルを嘲笑しています。私は自分のmockDelegateのプロパティを設定しようとしましたが、設定されません。私は何か間違っているのですか?OCMockプロトコルのプロパティ?

- (CGFloat)myFloatProperty { 
    return 0.0f; 
} 

- (void)setMyFloatProperty { 
} 

id mockDelegate = [OCMockObject mockForProtocol:@protocol(TestDelegate)]; 
[mockDelegate setMyFloatProperty:100.0]; 

答えて

0

OCMockはそれがしかし、デフォルトでは、彼らがnilオブジェクトのデフォルトを越えて何もしない、(myFloatValueプロパティを含む)プロトコルを実装するあなたのためのメソッドを作成します。あなたが特定の値を返す常ににmyFloatPropertyをしたい場合は、OCMStubを使用して、そのプロパティのゲッターをスタブする必要があります。

id mock = OCMProtocolMock(@protocol(TestDelegate)); 
[mock setMyFloatProperty:100.0f]; 
NSLog(@"%f", [mock myFloatProperty]); // prints 0.000000 
OCMStub([mock myFloatProperty]).andReturn(100.0f); 
NSLog(@"%f", [mock myFloatProperty]); // prints 100.000000 

場合テスト中にプロパティを変更できるようにするには、いくつかのオプションがあります。最も簡単な方法は、テストケースクラスにスタブプロパティを作成し、スタブメソッドをそのプロパティにリダイレクトすることです。 myFloatPropertyがプリミティブ型であるため、

@interface MyTestCase : XCTestCase 
@property CGFloat stubMyFloatProperty; 
@end 

@implementation MyTestCase 

- (void)testTestDelegate { 

    id mock = OCMProtocolMock(@protocol(TestDelegate)); 
    [[[[mock stub] ignoringNonObjectArgs] andCall:@selector(setStubMyFloatProperty:) onObject:self] setMyFloatProperty:0.0f]; 
    OCMStub([mock myFloatProperty]).andCall(self, @selector(stubMyFloatProperty)); 

    [mock setMyFloatProperty:100.0f]; 
    NSLog(@"%f", [mock myFloatProperty]); // prints 100.000000 

}  

@end 

注意は、あなたが任意の値に対して適切にそれをスタブするために、非標準OCMock構文を使用する必要があります。詳細はthis answerを参照してください。

+0

CLLocationをスタブするにはどうすればよいですか?私はfloatと同じ方法を試しましたが、代わりにCLLocationを差し込み、nullを取得しました。 – iamarnold

+0

コードを投稿できますか?それは私のためにうまく動作します。 –

関連する問題