2012-10-12 12 views
9

welche Methode gleichwertig für das folgende ist:Methode gleichwertig für @InjectMocks

@Mock 
MyType1 myType1; 

@Autowired 
@InjectMocks 
MyType2 myType2; 

I @Mock mit mock(MyType1.class) ersetzen kann.

Aber wie kann ich @InjectMocks durch einen Methodenaufruf ersetzen? So etwas wie dieses:

injectMocks(MyType2.class) 

Antwort

2

hilft Warum Autowired in Ihrem junit-Test? Da Sie die Abhängigkeiten für MyType2 verspotten, müssen Sie ihre concreate Implementierung kennen, wenn Sie Ihren Test schreiben.

Dann brauchen und sollten Sie Spring oder ein beliebiges Injection-Framework nicht verwenden, um die Instanz MyType2 zu erstellen, die Sie testen möchten. Erstelle es direkt in deiner Testinitialisierung! Ich weiß, dass es nach einigen Jahren der Verwendung von IoC-Frameworks schwierig ist, myType2 = new MyType2Impl(mock(myType1.class)) zu schreiben, aber es wird Ihre Tests wirklich einfacher und schneller machen (weil kein Anwendungskontext erstellt werden muss). Z. B .:

@Before 
public void setup() { 
    myType1 = mock(MyType1.class); 
    myType2 = new MyType2Impl(myType1); 
} 

Aber wenn Sie wirklich IoC verwenden möchten in Ihrem JUnit-Tests verwenden springockito von Brice vorgeschlagen hat, und Ihre Mock MyType1 in Ihrem Anwendungskontext aufzubauen.

+1

Der Link ist tot. –

+0

was ist IOC ???? – jonney

8

Es gibt keine öffentliche API in Mockito für Mock-Injektion. Da diese Annotation hauptsächlich auf der Art und Weise basiert, wie Dinge in einem Test ausgelegt werden, hängt sie ziemlich mit der Initialisierungsphase des Tests zusammen.

Obwohl es irgendwann in der Zukunft ändern könnte.

Die mit Mockito annotierten Felder können jedoch entweder durch MockitoJUnitRunner oder MockitoAnnotations.initMocks() initialisiert werden. Sie erstellen beide Scheininstanzen und führen eine Injektion durch.

Auch ich sehe in Ihrem Code, dass Sie @Autowired verwenden - daher Frühjahr Zeug, wahrscheinlich über XML konfiguriert. @InjectMocks wurde nicht wirklich entwickelt, um mit anderen Frameworks für Abhängigkeitsinjektionen zu arbeiten, da die Entwicklung von Unit-Test-Anwendungsfällen und nicht von Integrationstests vorangetrieben wurde.

Vielleicht möchten Sie einen Blick auf springockito werfen, die ein anderes Projekt ist, das versucht, Mockito Mock-Erstellung im Frühjahr zu erleichtern.

Hoffnung, die

+0

Die Verbindung ist tot. –

+1

@TarunMaganti Ich habe den Link aktualisiert. Obwohl es scheint, gibt es jetzt mehrere Gabeln von Springockito, ich denke, das ist der offizielle, aber überprüfen Sie, bevor Sie es verwenden;) – Brice