Я использую 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() еще выполняет проверку в любом случае.
Я добавил этот метод, потому что обнаружил, что иногда блок Verifications будет проходить, даже если AccessController.doPrivileged(). Я использую Netbeans 8.0.1, и после большого тестирования, я обнаружил, что если я запустил тест, используя «Запуск Focused Test Method» или «Debug Focused Test Method» (выполняется только 1 тест), он проходит. Если я использую «Test File» (запускает все тесты), то testFoo1() терпит неудачу, потому что он не бросает MissingInvocation. Если я использую «тестовый файл отладки» (выполняется все тесты), он всегда терпит неудачу, если я поставлю точку останова; он с перерывами терпит неудачу, если я не поставил точку останова. Очень странно.
Является ли использование моего JMockit правильным? Я новичок, поэтому любые указатели оценили, но учтите, что я хочу запустить тот же самый тестовый код из 2 тестов, которые отличаются только логическим флагом. Я не хочу дважды копировать/вставлять тест.
Есть ли что-то с Netbeans?
Это как-то связано с инъекцией CGLib где-то в трубопроводе?