Используйте Powermockito, чтобы проверить, вызывается ли приватный метод или нет
Я хотел бы проверить, выполняется ли закрытый метод моего класса для тестирования или не используется powermockito.
Предположим, у меня есть этот класс для тестирования:
public class ClassToTest {
public boolean methodToTest() {
//doSomething (maybe call privateMethod or maybeNot)
return true;
}
//I want to know if this is called or not during the test of "methodToTest".
private void privateMethod() {
//do something
}
}
Когда я тестирую "methodToTest", я хочу проверить, возвращает ли он правильный результат, но также выполняет ли он закрытый метод "privateMethod" или нет. В поисках другого обсуждения я написал этот тест, в котором используется powermockito, но он не работает.
public class TestClass {
@Test
testMethodToTest(){
ClassToTest instance = new ClassToTest();
boolean result = instance.methodToTest();
assertTrue(result, "The public method must return true");
//Checks if the public method "methodToTest" called "privateMethod" during its execution.
PowerMockito.verifyPrivate(instance, times(1)).invoke("privateMethod");
}
}
Когда я использую отладчик, кажется, что последняя строка (PowerMockito.verifyPrivate...) не проверяет, был ли приватный метод выполнен один раз во время теста, но вместо этого кажется, что он выполняет сам приватный метод. Кроме того, тест проходит успешно, но с использованием отладчика я уверен, что закрытый метод не выполняется во время вызова instance.methodToTest(). Что случилось?
1 ответ
Я бы сделал это проще, без PowerMockito. Учтите это (это какой-то шпионский объект):
public class TestClassToTest {
private boolean called = false;
@Test
public void testIfPrivateMethodCalled() throws Exception {
//given
ClassToTest classToTest = new ClassToTest() {
@Override
void privateMethod() {
called = true;
}
};
//when
classToTest.methodToTest();
//then
assertTrue(called);
}
}
Это требует изменения privateMethod()
в пакетный приват (но в этом нет ничего плохого).
Но имейте в виду, что реализация тестирования является плохой практикой и может привести к хрупким тестам. Вместо этого вы должны проверить только результаты.