Meines Wissens können Sie Konstruktoren nicht mit Mockito verspotten, sondern nur mit Methoden. Laut dem Wiki auf der Google-Codepage von Mockito gibt es jedoch eine Möglichkeit, das Konstruktorverhalten zu verspotten, indem in Ihrer Klasse eine Methode erstellt wird, die eine neue Instanz dieser Klasse zurückgibt. dann können Sie diese Methode verspotten. Unten ist ein Auszug direkt aus dem Mockito-Wiki :
Muster 1 - Verwenden einzeiliger Methoden zur Objekterstellung
Um Muster 1 zu verwenden (Testen einer Klasse namens MyClass), würden Sie einen Aufruf wie ersetzen
Foo foo = new Foo( a, b, c );
mit
Foo foo = makeFoo( a, b, c );
und schreiben Sie eine einzeilige Methode
Foo makeFoo( A a, B b, C c ) {
return new Foo( a, b, c );
}
Es ist wichtig, dass Sie keine Logik in die Methode aufnehmen. Nur die eine Zeile, die das Objekt erstellt. Der Grund dafür ist, dass die Methode selbst niemals einem Unit-Test unterzogen wird.
Wenn Sie zum Testen der Klasse kommen, ist das Objekt, das Sie testen, tatsächlich ein Mockito-Spion, bei dem diese Methode überschrieben wird, um einen Schein zurückzugeben. Was Sie testen, ist daher nicht die Klasse selbst, sondern eine sehr leicht modifizierte Version davon.
Ihre Testklasse enthält möglicherweise Mitglieder wie
@Mock private Foo mockFoo;
private MyClass toTest = spy(new MyClass());
Zuletzt verspotten Sie in Ihrer Testmethode den Aufruf von makeFoo mit einer Zeile wie
doReturn( mockFoo )
.when( toTest )
.makeFoo( any( A.class ), any( B.class ), any( C.class ));
Sie können Matcher verwenden, die spezifischer sind als any (), wenn Sie die Argumente überprüfen möchten, die an den Konstruktor übergeben werden.
Wenn Sie nur ein verspottetes Objekt Ihrer Klasse zurückgeben möchten, sollte dies für Sie funktionieren. In jedem Fall können Sie hier mehr über das Verspotten der Objekterstellung lesen:
http://code.google.com/p/mockito/wiki/MockingObjectCreation