Wie kann ich OCMock Objekte mit Code, der isKindOfClass ruft?

stimmen
7

Ich möchte einige Code mit OCMock testen.

Die Innereien des Codes fordern [NSObject isKindOfClass]auf dem Mockobjekt ich den Code bin Bereitstellung, etwa so:

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

Allerdings, wenn ich gebe eine OCMockObject-basierten mock wie folgt erstellt:

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

es scheint , dass es nicht das nicht passiert isKindOfClassTest.

Irgendwelche Vorschläge?

Veröffentlicht am 29/01/2009 um 02:17
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
7

Die allgemeine Regel ist , dass , wenn Sie anrufen isKindOfClass:und du bist nicht einer der plist Klassen vorbei (zB NSString oder NSNumber), tun Sie es falsch.

Wenn die Methode tut zwei oder mehr verschiedene Dinge, je nachdem, welche Klasse ihr Argument ist, zerreißt es in mehrere Methoden, und jede Methode separat testen.

Wenn die Methode funktioniert nur eine Sache, aber hat mit dem Objekt unterschiedlich, je nachdem, welcher Klasse es ist, dann zu interagieren:

  1. Machen Sie ein Protokoll. (Protokolle in Obj-C sind „Schnittstellen“ in einigen anderen OO-Sprachen genannt, wie Java.)
  2. Nehmen Sie die viele Klassen alle das Protokoll entsprechen. Bei Bedarf Kategorien verwenden, um die notwendigen Methoden von außen hinzuzufügen.
  3. Machen Sie das Verfahren unter Testprüfung auf Übereinstimmung mit dem Protokoll, anstelle der aktuellen isKindOfClass:Überprüfung.
  4. Machen Sie das Verfahren unter Test, die Methoden in dem Protokoll verwenden.
Beantwortet am 29/01/2009 um 03:20
quelle vom benutzer

stimmen
2

Wie wäre es mit:

    [[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL) {YES})] isKindOfClass:[FancyClass class]];
Beantwortet am 06/05/2013 um 19:37
quelle vom benutzer

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