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.
Powiązane problemy
- 1. OcMock vs OcMockito - jakie są plusy i minusy
- 2. Klasa podstawowa vs Klasa użyteczności
- 3. ZipPackage Klasa vs Zipfile klasa
- 4. metoda vs funkcja vs procedura vs klasa?
- 5. Klasa VS ref Struct
- 6. Klasa Object vs HashMap
- 7. Pisarz XML iOS klasa
- 8. Testowanie pustych metod przy użyciu OCMock w iOS
- 9. OCMock an NSOperation
- 10. OCMock i UIViewController
- 11. Sklearn SGDClassifier częściowy pasuje
- 12. Procesory zespołów i procesorów wielordzeniowych
- 13. OCMock: Wyśmiewające protokoły z wykluczeniem metod opcjonalnych
- 14. Klasa vs pakiet vs moduł vs komponent vs kontener kontra serwis vs platforma w świecie Java
- 15. Most iOS vs bridge_transfer
- 16. OCMock i testowania bloku, wykonując
- 17. Awaria OCMock w czasie wykonywania
- 18. Klasa vs Moduł w projektowaniu API Ruby?
- 19. jQuery sortable selector ("id" vs. "klasa")?
- 20. Klasa DateTime vs. natywne funkcje daty PHP
- 21. Klasa HtmlHelper w przestrzeniach System.Web.Pages.Html vs System.Web.Mvc
- 22. Dziwne zachowanie - Klasa # getDeclaredMethods vs getMethods
- 23. niejawny klasa vs niejawna konwersja do trait
- 24. obiektywne metody C Klasa vs C Funkcje
- 25. Wiosna @Transactional klasa vs metody zasad pierwszeństwa
- 26. Podmiot Framework .. częściowy konstruktor
- 27. EntityFramework zmiana model częściowy
- 28. mysqldump częściowy bazie
- 29. JavaScript RegEx częściowy mecz
- 30. Częściowy kod dostępu
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. –