W jaki sposób można używać obiektów OCMock z kodem, który wywołuje isKindOfClass?

głosy
7

Chciałbym przetestować jakiś kod z OCMock.

Wnętrzności kodu wzywają [NSObject isKindOfClass]na mock obiektu Mam dostarczanie kodu, tak jak poniżej:

if ([object isKindOfClass:[FancyClass class]]) { ...}

Jednak, kiedy dostarczyć OCMockObject opartego na makiety stworzony tak:

mock = [OCMockObject mockForClass:[FancyClass class]];

wydaje się, że to nie przejdzie isKindOfClasstestu.

Jakieś sugestie?

Utwórz 29/01/2009 o 02:17
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
7

Ogólna zasada jest taka, że jeśli dzwonisz isKindOfClass:i nie jesteś przechodząc jedną z klas plist (np NSString lub NSNumber) Robisz to źle.

Jeśli metoda ma dwie lub więcej różnych rzeczy w zależności od klasy jej argumentem jest to, rozszarpały go na wiele sposobów i przetestować każdą metodę oddzielnie.

Jeśli metoda nie tylko jedno, ale musi współdziałać z obiektem różnie w zależności od klasy tak, to:

  1. Dodać do protokołu. (Protokoły w Obj-C są nazywane „interfejsy” w niektórych innych językach OO, takich jak Java).
  2. Wprowadzić wiele klas wszystkich zgodnych z protokołem. Jeśli to konieczne, należy dodać kategorię do niezbędnych metod z zewnątrz.
  3. Uczynić metodę sprawdzania testu pod kątem zgodności z protokołem, w miejscu obecnego isKindOfClass:czeku.
  4. Sprawiają, że metoda badanego użyć metod w protokole.
Odpowiedział 29/01/2009 o 03:20
źródło użytkownik

głosy
2

Co powiesz na:

    [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];
Odpowiedział 06/05/2013 o 19:37
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more