Ich versuche, die Ins und Outs von verschiedenen Mocking-Bibliotheken zu lernen und PowerMock (speziell die EasyMock-Erweiterung) ist der nächste auf der Liste. Ich versuche, einen Konstruktor zu verspotten, und die angegebenen Beispiele haben nicht die gleiche Antwort, wenn ich versuche, sie zu replizieren. Soweit ich das beurteilen kann, macht es dem Konstrukteur nie etwas vor und geht einfach so vor, als wäre es normal.PowerMocks expectNew() verspottet einen Konstruktor nicht wie erwartet
Dies ist die Testklasse:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Writer.class})
public class FaultInjectionSituationTest {
@Test
public void testActionFail() throws Exception {
FaultInjectionSituation fis = new FaultInjectionSituation();
PowerMock.expectNew(Writer.class, "test")
.andThrow(new IOException("thrown from mock"));
PowerMock.replay(Writer.class);
System.out.println(fis.action());
PowerMock.verify(Writer.class);
}
}
ich mit einem EasyMock.isA (String.class), um den "Test" versucht haben, zu ersetzen, aber es ergab die gleichen Ergebnisse.
Dies ist FaultInjectionSituation:
public class FaultInjectionSituation {
public String action(){
Writer w;
try {
w = new Writer("test");
} catch (IOException e) {
System.out.println("thrown: " + e.getMessage());
return e.getLocalizedMessage();
}
return "returned without throw";
}
}
Der "Writer" ist nichts anderes als eine Schale einer Klasse:
public class Writer {
public Writer(String s) throws IOException {
}
public Writer() throws IOException{
}
}
Wenn der Test durchgeführt wird, druckt es aus „ohne Wurf zurück msgstr "" "Die Angabe der Ausnahme wurde nie ausgelöst.
Danke, ich habe nicht bemerkt, dass das Objekt, das den Konstruktor aufgerufen hat, ebenfalls enthalten sein muss. – AdamSpurgin
Ich lief in dasselbe Problem ... Genau, was ich vermisste :) –
Vielen Dank, ich kämpfte lange, bis ich diese Antwort fand. – OQJF