Ich habe gerade angefangen, mit PowerMock und EasyMock zu spielen, und ich bin ein wenig verwirrt über die Art, wie verspottete Methodenaufrufe gezählt werden.Method Invocation Count Assertion
Beispielcode:
class ClassToBeTested{
private boolean toBeMocked(Integer i){
return i%2==1;
}
}
Und der Testcode:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassToBeTested.class)
public class ClassToBeTestedTest{
private final Integer i=2;
ClassToBeTested underTest;
@Before
public void setUp() throws Exception {
underTest=PowerMock.createPartialMock(ClassToBeTested.class,
"toBeMocked");
PowerMock.expectPrivate(underTest, "toBeMocked", i)
.andReturn(true);
PowerMock.replay(underTest);
}
@Test
public dummyTest(){
Assert.assertTrue(underTest.toBeMocked(i);
//the call is: underTest.toBeMocked(2)
//so the computation is return 2%2==1; google says it 0 :)
//thus real method would return 0==1 (false)
//mocked one will return true, assertion should pass, that's ok
//RERUN ASSERTION
Assert.assertTrue(underTest.toBeMocked(i);
//method invocation count should be now 2
}
@After
public void tearDown() {
PowerMock.verify(underTest);
//WILL FAIL with exception saying
//the mocked method has not been called at all
//expected value (obvious) is one
}
Und meine Frage ist, warum die verspottete Methodenaufruf Erwartung scheitern? Warum zeigt die Überprüfung ClassUnderTest
, dass die verspottete Methode überhaupt nicht aufgerufen wurde?
** Meine Schuld ** Das Beispiel, das ich oben vorgestellt habe, wurde auf das eigentliche Problem gemacht, aber leider habe ich ** ein wichtiges Problem übersehen, das mein Problem erklärt: – wilu
** Meine Schuld ** Das Beispiel I Das obige Problem wurde auf der Basis des eigentlichen Problems gemacht, aber leider habe ich ein wichtiges Problem übersehen, das mein Problem erklärt: mein Test dummyMethode im realen Beispiel ist in zwei Test-Methoden unterteilt, die dieselbe verspottete Methode ausführen. Meine Erwartungen sind, dass die verspottete Methode nur einmal von allen Testmethoden ausgeführt wird. Ich dachte ** falsch ** als After Methode wird ** einmal ** nach der Ausführung aller Testmethoden aufgerufen werden. Eine Testmethode nennt die verspottete Methode überhaupt nicht, daher ist der tatsächliche Aufruf O, erwartete 1, also meine Frage ... – wilu