Uczę się OCMock do testowania iOS. Jaka jest różnica pomiędzy "mockem klasowym" i "częściowym" i kiedy należy użyć jednego z drugim?Procesory iOS OCMock częściowy vs klasa
6
A
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.
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. 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. –