Hvordan kan jeg bruke OCMock gjenstander med kode som kaller isKindOfClass?

stemmer
7

Jeg ønsker å teste noen kode med OCMock.

Innmaten i koden ringer [NSObject isKindOfClass]på mock objekt jeg gi til koden, slik:

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

Men når jeg gir en OCMockObject basert mock laget slik ut:

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

det ser ut til at det ikke består isKindOfClasstesten.

Noen forslag?

Publisert på 29/01/2009 klokken 01:17
kilden bruker
På andre språk...                            


2 svar

stemmer
8

Den generelle regelen er at hvis du ringer isKindOfClass:og du ikke passerer en av de plist klasser (f.eks NSString eller NSNumber), du gjør det galt.

Hvis metoden gjør to eller flere forskjellige ting avhengig av hvilken klasse dens argument er, rive den opp i flere metoder, og teste hver enkelt metode for seg.

Dersom metoden gjør bare én ting, men har til å samhandle med objektet forskjellig avhengig av hvilken klasse det er, så:

  1. Lag en protokoll. (Protokoller i Obj-C kalles “grensesnitt” i noen andre OO språk som Java.)
  2. Gjør de mange klasser alt er i samsvar med protokollen. Om nødvendig, bruk kategorier for å legge de nødvendige metoder fra utsiden.
  3. Gjør metoden under test sjekk for samsvar til protokollen, i stedet for dagens isKindOfClass:sjekk.
  4. Gjør den metode som testes bruke metodene i protokollen.
Svarte 29/01/2009 kl. 02:20
kilden bruker

stemmer
2

Hva med:

    [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];
Svarte 06/05/2013 kl. 18:37
kilden bruker

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