2013-03-01 14 views
12

Bir OCMock nesnesinin işlev çağrısının bir yönteme geçirilmesiKindOfClass. Ancak, birim sınaması için döndürülen değer adanmış sınıfa değil, OCMockObjectOCMock nesnesi için isKindOfClass çağrıldığında alay edilen değer nasıl alınır?

+1

OCMockObject, bu çerçeve için temel sınıf gibi görünüyor. + (Id) mockForClass: Class'ı çağırıyor ve yaratılan nesnenin neden kendini alay konusu sınıf olarak bildirmediğini merak ediyor musunuz? – JiuJitsuCoder

+0

Eğer hala bu sorunu yaşıyorsanız, kullanım durumunuzu sunabilir misiniz? Ne yapmaya çalışıyorsun? Bazı kodlar analize yardımcı olur. –

+0

Parametre sınıfına bağlı olarak nesneler oluşturan her fabrika sınıfı için yararlı olabilir. Benim durumumda, bu fabrikaları test etmek için sahte şeyler yerine gerçek nesneler yaratmam gerekiyor. – Giuseppe

cevap

0

Eğer OCMock nesnesini işlev çağırdığı bir yönteme geçirmek istiyorsanız, Kısmi alay oluşturmalısınızKindOfClass. Aşağıdaki kod size yardımcı olabilir. Benim için çalıştı. FirstViewController

-(void)doSomething:(SecondViewController *)detail 
{ 
    if ([detail isKindOfClass:[SecondViewController class]]) 
    { 
     NSString * returnVal = [detail getName:@"PARAM"]; 
     NSLog(@"returnVal %@",returnVal); 
    } 
} 

Bir daha alternatif isKindOfClass yöntemini alay edilir Yani test durumu İşte

- (void)testMyTest 
{ 
    CalculatorViewController* masterVC = [[CalculatorViewController alloc]init]; 
    id master = [OCMockObject niceMockForClass:[SecondViewController class]]; 
    BOOL ret = YES; 
    [[[master expect] andReturnValue:OCMOCK_VALUE(ret)] isKindOfClass:[SecondViewController class]]; 
    [[master expect] getName:@"PARAM"]; 
    [masterVC doSomething:master]; 
    [master verify]; 
} 
+0

Bir mock/niceMock kullanmanın avantajı, nesneyi başlatmanızın gerekmemesidir. Benim durumumda bu nesneyi yaratmak zor. – Giuseppe

+0

ok. Bir alternatif isKindOfClass yönteminin alay edilmesidir. Bu id ana gibi bir şey = [OCMockObject niceMockForClass: [SecondViewController sınıfı]]; BOOL ret = YES; // değerini [[[bekleyen bekletme] ve DönüşMadde: OCMOCK_VALUE (ret)] değiştirebilirKindOfClass: [SecondViewController class]]; –

+0

Yaptığım şey, bir hoşMock kullanmak ve alaylı sınıfı döndürmek için "sınıf" yöntemini kullanmaktır. Bu, herhangi bir KindOfClass için yalnızca EVET döndürmek için daha güvenilirdir. Bu neden OCMock'un varsayılan davranışı benim için açık değil. – Giuseppe

1

olacak içeride

-(void)testMyTest 
{ 
    FirstViewController* masterVC = [[FirstViewController alloc]init]; 
    SecondViewController *second = [[SecondViewController alloc] init]; 
    id master = [OCMockObject partialMockForObject:second]; 
    [[master expect] getName:@"PARAM"]; 
    [masterVC doSomething:master]; 
    [master verify]; 

    [masterVC release]; 
    [second release]; 
} 

doSomething yöntemi yazmaya nasıl tam açıklayan bir bütün makale OCMock isKindOfClass yöntemi (varsayılan olarak yoktur) ve nasıl kullanılır: http://blog.carbonfive.com/2009/02/17/custom-constraints-for-ocmock/

İlgili konular