Mocking Reflection-basierte Aufrufe

8

Ich versuche, einige reflexionsbasierte Methoden zu verspotten. Unten können Sie die Details sehen,

Testklasse

%Vor%

Test

%Vor%

}

oder

%Vor%

Die Tests schlagen jedoch mit einer NullPointerException fehl. Ich verstehe, dass ich etwas falsch mache gegen spottende Konzepte, aber ich verstehe nicht, was es ist. Könnten Sie bitte etwas Licht darauf werfen und mir auch vorschlagen, wie diese Methode getestet werden kann?

Danke.

    
Bala 25.01.2012, 22:10
quelle

2 Antworten

18

Sie benötigen ein Method-Objekt und ein Klassen-Objekt. Laut deinem Kommentar kann Mockito eine Methode nicht vortäuschen, also brauchst du eine echte. Ich habe das nicht getestet, aber ich glaube, das würde funktionieren. Statt:

%Vor%

Sie brauchen:

%Vor%

Offensichtlich liefert getName() nicht mehr "someMethod" und getDeclaringClass().getName() gibt den Namen dieser Testklasse zurück (im Beispiel), aber obwohl Sie nicht auswählen konnten, was sie zurückgeben, ist das, was sie zurückgeben, immer noch deterministisch , also sollten Sie in der Lage sein, alles zu überprüfen, was Sie brauchen. (Natürlich, wenn Sie spionieren oder überprüfen müssen, ob ein Aufruf für das Method-Objekt selbst ausgeführt wurde, stecken Sie immer noch fest.)

    
jhericks 25.01.2012, 22:57
quelle
3

Ja, das Problem ist, dass mockContext.getMethod() null zurückgibt. Also, jedes Mal, wenn Sie dies ausführen, dann rufen Sie etwas auf das Ergebnis (getDeclaringClass () oder getName ()) Sie erhalten die NPE. Wahrscheinlich möchten Sie die Standardantwort von RETURNS_DEEP_STUBS verwenden, wenn Sie den Mock einrichten. Etwas wie

%Vor%

sollte den Trick machen.

    
Dawood ibn Kareem 26.01.2012 10:38
quelle

Tags und Links