2013-08-17 7 views

Odpowiedz

12

Class mocks tworzenia obiektów, które są czyste imitacje na przykład klasy.

Partial mocks instancja klasy klasy a pozwala na odgadnięcie dowolnej z jej metod.

Załóżmy, że mam tych klas:

@interface Foo : NSObject 
- (void)doX; 
@end 
@implementation 
- (void)doX 
{ 
    NSLog(@"X"); 
} 
@end 

@interface Bar : NSObject 
- (void)doA:(Foo *)foo; 
- (void)doB; 
@end 
@implementation Bar 
- (void)doA:(Foo *)foo 
{ 
    NSLog(@"A"); 
    [foo doX]; 
    [self doB]; 
} 
- (void)doB 
{ 
    NSLog(@"B"); 
} 
@end 

Jestem zainteresowany przetestowaniem miejscowości Bar doA: metody. Oczekuję, że zadzwoni pod numer doX na obiekcie Foo, a następnie wywoła jego własną metodę doB. Wdałbym to za pomocą klasowego makiety z Foo i częściowego udawania baru.

- (void)test_doA_shouldCall_doX_and_doB 
{ 
    id objectUnderTest = [OCMockObject partialMockForObject:[Bar new]]; 
    id fooMock = [OCMockObject mockForClass:Foo.class]; 
    [[fooMock expect] doX]; 
    [[objectUnderTest expect] doB]; 
    // Make the call 
    [objectUnderTest doA:fooMock]; 
    [objectUnderTest verify]; 
    [fooMock verify]; 
} 

tu zobaczyć, że mój częściowy mock pozwolił mi zadzwonić prawdziwą metodę chciałem przetestować podczas wyśmianie wewnętrznego połączenia z innym z metod instancji. Ponieważ nie potrzebowałem żadnej z prawdziwej funkcjonalności Foo, użyłem jednak makiety klasowej.

+0

Dzięki za naprawdę pomocną odpowiedź. Mam dwa pytania uzupełniające: 1) Czy to prawda, że ​​czyste makiety nie pozwalają na wywoływanie prawdziwych metod? 2) Dlaczego nie można stworzyć częściowego makiety Foo, a następnie wykonać oczekiwanie na metodę doX? – user1802143

+1

1. Czysta sztuczka nie jest wspierana przez rzeczywisty obiekt, ale technicznie możesz ustawić dowolną metodę wywoływania jakiejkolwiek metody za pomocą 'andCall' lub' andDo' - częściowa sztuczka pozwala ci zrobić 'iForwardToRealObject'. 2. Możesz stworzyć częściową próbę Foo - czasami tworzenie obiektu ma efekty uboczne lub wiąże się z pracą nieistotną dla twojego testu. Dodatkowo, czysta sztuczka, która nie jest fajną sztuczką, będzie narzekać, gdy zadzwoni nieoczekiwana metoda, podczas gdy częściowa sztuczka nie będzie. –