3

PowerMock と EasyMock を使い始めたばかりで、モックされたメソッド呼び出しがカウントされる方法について少し混乱しています。

コード例:

class ClassToBeTested{
 private boolean toBeMocked(Integer i){
  return i%2==1; 
  }
 }

そしてテストコード:

@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
}

そして私の質問は、モックされたメソッド呼び出しの期待が失敗するのはなぜですか? 検証するClassUnderTestと、モックされたメソッドがまったく呼び出されていないことが明らかになるのはなぜですか?

4

1 に答える 1

1

期待行を次のように変更した後、それは私にとってはうまくいきます:

 PowerMock.expectPrivate(underTest, "toBeMocked", i).andReturn(true).times(2);

その変更がなくても、嘲笑された母親が呼び出されなかったとは言えません。それは言う

  Unexpected method call toBeMocked(2):
    toBeMocked(2): expected: 1, actual: 2

最新の PowerMock および EasyMock バージョンを使用していますか?

于 2012-04-04T08:22:37.123 に答える