5

これはおそらく PowerMock/EasyMock 101 の質問で、理由がわかりません。私はメソッドを持つクラスCを持っています

public static boolean testInner(String s) {
    return false;
}

public static boolean testOuter() {
    String x = "someValue";
    return testInner(x);
}

私の testOuter() メソッドのテストでは、testInner が適切なパラメーターで呼び出されるようにしたいと考えています。そのために、私は次のようなことをしています: [@RunWith(PowerMockRunner.class) @PrepareForTest(EmailUtil.class) クラスレベルで宣言]

EasyMock.expect(C.testInner("blabla")).andReturn(true);
PowerMock.replayAll();
boolean status = C.testOuter();
PowerMock.verifyAll();  
assertTrue(status);

しかし、次のようなエラーが発生しています:

java.lang.AssertionError: 
Unexpected method call testOuter():
testInner("blabla"): expected: 1, actual: 0
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
    at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(EasyMockMethodInvocationControl.java:95)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:105)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:60)
    at C.testOuter(C.java)

実際のパラメーターを EasyMock.IsA(String.class) に置き換えましたが、まだうまくいきません。私はここで根本的にばかげたことをしていると確信しています。何か助けはありますか?

4

3 に答える 3

1

EasyMock に、testOuter() ではなく、testInner() への呼び出しを期待するように指示しているだけです。

 Unexpected method call testOuter():

これを試しました:

EasyMock.expect(C.testInner("blabla")).andReturn(true);
EasyMock.expect(C.testOuter());
PowerMock.replayAll();
于 2012-01-26T19:32:02.607 に答える
0

mockStaticPartial() を使用して static void 関数をモックするコール フローの例を提供するために応答します。

PowerMock.mockStaticPartial(Sample.class, "test");
Sample.test();
EasyMock.expectLastCall();
PowerMock.replay(Sample.class);

テストの後半で、次のようなものを呼び出した場合:

assertFalse(Sample.returnFalseBool());

この場合、test() 関数のみがモックされているため、テストは実際のメソッドを呼び出します。

免責事項:これがこの回答を追加するのに最適な場所ではないことは承知していますが、関連するさまざまな質問に対する他のいくつかの回答をつなぎ合わせると、この回答を思いつくのに役立ち、どこかに置く必要があると感じました.

于 2018-05-17T15:57:43.587 に答える