我正在使用JMockit 1.12並且想驗證是否調用了AccessController.doPrivileged()。這似乎相當簡單:JMockit/Netbeans - 驗證AccessController.doPrivileged()被調用
@Test(expected = MissingInvocation.class)
public void testFoo1() {
foo(false, true);
}
@Test
public void testFoo2() {
foo(false, false);
}
@Test
public void testFoo3() {
foo(true, true);
}
private void foo(boolean usePrivilegedAccess, boolean expectAccessControllerCall) {
new NonStrictExpectations(AccessController.class) {{
}};
if (usePrivilegedAccess) {
AccessController.doPrivileged((PrivilegedAction<String>)() -> "");
}
// verify AccessController.doPrivileged was called
if (expectAccessControllerCall) {
new Verifications() {{ AccessController.doPrivileged(withAny((PrivilegedAction<Object>)() -> null)); }};
}
}
注意testFoo1()不不調用AccessController.doPrivileged()尚未執行檢查反正。
我添加了這個方法,因爲我發現即使AccessController.doPrivileged()有時也會傳遞驗證塊。我正在使用Netbeans 8.0.1,經過很多測試後,我發現如果使用「運行聚焦測試方法」或「調試聚焦測試方法」(僅運行1次測試)來運行測試,則會通過測試。如果我使用「測試文件」(運行所有測試),則testFoo1()失敗,因爲它不會丟失MissingInvocation。如果我使用「調試測試文件」(運行所有測試),那麼如果我放置一個斷點,它總是失敗;它間歇地失敗,如果我不放在一個斷點。很奇怪。
我的JMockit用法是否正確?我是新的,所以任何指針讚賞,但請注意,我想運行2測試完全相同的測試代碼,只有一個布爾標誌不同。我不想複製/粘貼兩次測試。
Netbeans有什麼問題嗎?
這是與管道中的某處CGLib注入有關嗎?