[英]Verify private static method on final class gets called using PowerMockito
我有以下課程
public final class Foo {
private Foo() {}
public static void bar() {
if(baz("a", "b", new Object())) { }
}
private static boolean baz(Object... args) {
return true; // slightly abbreviated logic
}
}
這是我的測試:
@PrepareOnlyThisForTest(Foo.class)
@RunWith(PowerMockRunner.class)
public class FooTest {
@Test
public void bar() {
PowerMockito.mockStatic(Foo.class); // prepare
Foo.bar(); // execute
verifyPrivate(Foo.class, times(1)).invoke("baz", anyVararg()); // verify - fails
}
}
為此,我收到以下錯誤消息 - 我不明白為什么......
通緝但未調用 com.example.Foo.baz( null );
但是,與此模擬還有其他交互。
無論您檢查多少times
刪除上面的prepare
行似乎都會使驗證行通過... :(
(我們的 SONAR 代碼檢查強制每個測試都包含某種assertXyz()
(因此調用verify()
)並強制執行非常高的測試覆蓋率。)
任何想法如何做到這一點?
您的代碼的問題在於您模擬Foo
因此默認情況下不會調用您的方法實現,因此當您調用Foo.call()
時,默認情況下它什么都不做,這意味着它永遠不會調用baz
,這就是您得到這個的原因行為。 如果您想部分模擬Foo
,請使用選項Mockito.CALLS_REAL_METHODS
模擬它,以使其按照您的預期調用真正的方法,因此代碼應該是:
@PrepareOnlyThisForTest(Foo.class)
@RunWith(PowerMockRunner.class)
public class FooTest {
@Test
public void bar() throws Exception {
PowerMockito.mockStatic(Foo.class, Mockito.CALLS_REAL_METHODS); // prepare
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.