2016-03-29 5 views
1

Ich schreibe Testfälle mit XCTest Framework von Apple zur Verfügung gestellt. Ich komme mit Situation, wo ichWie lokale Variable verprügeln, ohne OCMock

-(void)myFunction{ 
    A* a = [[A alloc] init]; 
} 

von meiner Testfall-Klasse in der Funktion wie diese unten zugewiesen lokale Variablen verspotten will ich will in meiner Funktion testMyFunction Klasse A verspotten. Gibt es eine Möglichkeit, dies ohne OCMock zu tun?

Antwort

0

Sie können die Klasse, die in der Methode verwendet werden soll, in das System unter Test einspeisen. Im Test können Sie eine andere Klasse verwenden.

1

Wenn es in Ordnung ist, die Instanz zuerst zu erstellen, injizieren Sie sie mit den normalen Dependency-Injection-Techniken.

Aber wenn Sie benötigen, um sicherzustellen, dass die Instanz nicht, bis es gebraucht wird erstellt werden, haben Sie ein paar Möglichkeiten:

  • eine Klasse injizieren, wie @dasdom sagt. Rufen Sie dann seinen Initialisierer auf, wenn Sie ihn benötigen.
  • Injizieren Sie einen Block, der als Factory fungiert. Nennen Sie es, wenn Sie es brauchen.
  • Für komplexere Initialisierung: injizieren Sie eine Factory. Normalerweise würde ich dies einem Protokoll anpassen, um Ersatz klarzustellen.