2016-06-30 5 views
0

Aufgrund dieser einfachen KlasseIst es möglich, mit OCMock intra-Klasse Verhalten zu überprüfen

@implementation ExampleClass 

- (void)doStuff 
{ 
    [self doOtherStuff]; 
} 

- (void)doOtherStuff 
{ 
    // something happens here 
} 

@end 

ist es möglich, das Verhalten dieser Klasse zu testen, dass eine seiner eigenen Methoden ein anderer ruft? Zum Beispiel kann ich im obigen Beispiel OCMock verwenden, um zu überprüfen, ob doOtherStuff aufgerufen wird? Ich habe folgendes versucht:

id mock = OCMClassMock([ExampleClass class]); 
[mock doStuff]; 
OCMVerify([mock doOtherStuff]); 

aber es ruft nicht eigentlich um den Anruf zu doStuff überhaupt aufgrund der Tatsache, dass es sich um eine Klasse Mock ist. Ist das nur mit einem partiellen Schein möglich - und wenn ja, was wäre ein alternatives Design der ExampleClass, um keinen partiellen Schein zu benötigen? Bear with me - Anfänger zum Testen und Mocking hier :)

Antwort

1

Dies ist, was teilweise Mocks sind. Erstellen Sie eine Instanz von ExampleClass, und erstellen Sie dann einen partiellen Mock für diese Instanz. Mit diesem partiellen Mock können Sie jetzt Methoden auf dieser Instanz verifizieren und/oder löschen, z. vergewissern Sie sich, dass doOtherStuff aufgerufen wird.

+0

Danke, macht Sinn. Frage aber - wie stimmt das mit der Sichtweise überein, dass Teilspotten "der Teufel" sind? Führt diese Art von Intra-Class-Testing zu einer schlechten Übung in der Unit-Test-Welt? Außerdem, liebe deine OCMock Bibliothek! – stonedauwg

+0

Nun, die oben beschriebene Technik ist im Grunde eine Variation des [testspezifischen Unterklassenmusters] (http://xunitpatterns.com/Test-Specific%20Subclass.html). Es hat seinen Nutzen, aber viele Menschen betrachten ein Design, in dem die beiden Methoden in verschiedenen Klassen überlegen sind. In diesem Fall können Sie die andere Klasse durch einen normalen Schein ersetzen, normalerweise mit Abhängigkeitsinjektion. –

Verwandte Themen