Hoe kan ik OCMock objecten met code die isKindOfClass noemt?

stemmen
7

Ik wil graag wat code met OCMock testen.

De ingewanden van de code roepen [NSObject isKindOfClass]op het voorwerp van spot ik het aan de code, als volgt:

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

Echter, toen ik zorgen voor een OCMockObject-based mock gemaakt als volgt uit:

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

blijkt dat het niet is geslaagd voor isKindOfClasstest.

Eventuele suggesties?

De vraag is gesteld op 29/01/2009 om 02:17
bron van user
In andere talen...                            


2 antwoorden

stemmen
7

De algemene regel is dat als je belt isKindOfClass:en je bent niet het passeren van een van de plist klassen (bijv NSString of NSNumber), je doet het verkeerd.

Als de methode twee of meer verschillende dingen doet, afhankelijk van welke klasse haar betoog is, scheurt het in meerdere methoden, en test elke methode afzonderlijk.

Als de methode doet maar één ding, maar heeft om te communiceren met het object anders, afhankelijk van welke klasse het is, dan:

  1. Maak een protocol. (Protocols in Doelstelling-C worden “interfaces” in enkele andere OO talen, zoals Java.)
  2. Maak de vele klassen alle voldoen aan het protocol. Gebruik indien nodig categorieën om de benodigde methoden van buitenaf toe te voegen.
  3. Maken de werkwijze te testen controle van de overeenstemming met het protocol, in plaats van de huidige isKindOfClass:controle.
  4. Maken de werkwijze te testen gebruiken de werkwijzen die in het protocol.
antwoordde op 29/01/2009 om 03:20
bron van user

stemmen
2

Hoe zit het met:

    [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];
antwoordde op 06/05/2013 om 19:37
bron van user

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