2016-03-28 16 views
0

OCMock kullanarak bir protokol alay ediyorum. Özelliklerimi mockDelegate için ayarlamayı denedim, ancak ayarlanmadı. Yanlış bir şey mi yapıyorum?OCMock protokolü özellikleri?

- (CGFloat)myFloatProperty { 
    return 0.0f; 
} 

- (void)setMyFloatProperty { 
} 

:

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

cevap

0

OCMock o ancak, varsayılan olarak, bir nil nesne için varsayılan ötesinde bir şey yapmayın, (myFloatValue mülkiyet dahil) protokolünü uygulamak sizin için yöntemler yaratacak Eğer için myFloatProperty her zaman belirli bir değer döndürmek isterseniz, OCMStub kullanarak o tesisin getter saplama gerekir:

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 

ise Testiniz sırasında mülkün değiştirilebilmesini istiyorsanız, birkaç seçenek vardır. En kolay yol, test vakası sınıfınızda bir saplama özelliği oluşturmak ve saplama yöntemlerini bu özelliğe yönlendirmektir. myFloatProperty basit bir tür olduğu için,

@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 

Not sen keyfi değerleri için düzgün saplama amacıyla standart dışı OCMock sözdizimi kullanmak zorunda. Daha fazla bilgi için this answer'a bakın.

+0

CLLocation'ı nasıl ekleyebilirim? Aynı yöntemi float için denedim, fakat yerine bir CLLocation'a taktım ve bir null aldım. – iamarnold

+0

Kodunuzu gönderir misiniz? Benim için iyi çalışıyor. –