#java #unit-testing #mockito
Вопрос:
У меня есть такой класс, который мне нужен для модульного тестирования:
public class ClassA {
private String methodA(String abc, String bcd) {
...
//do some operation to get another String cde
...
byte[] byteArray = methodB(cde)
...
return def;
}
private byte[] methodB(String cde) {
...
return byteArray;
}
}
Когда я пишу модульный тест для этого класса с помощью Mockito, я могу сделать это следующим образом:
public class ClassATest {
@Mock ClassA classA;
@Test
void test() {
String result = classA.methodA(abc, bcd);
assertEquals(result, def);
}
}
Хотя это нормально, я также хочу проверить возвращаемый массив байтов methodB
. Я могу указать, как будет выглядеть результирующий массив байтов в моем test()
методе, но я не уверен в том, как вызывать methodB
test()
и утверждать вывод, возвращаемый им.
Как я могу этого достичь?
Комментарии:
1. «и утверждать вывод, возвращаемый им», вы не можете и не должны заботиться о результатах вызовов методов внутри другого метода. Тест, который
methodA
дает ожидаемый результат, когда вы его вызываете; тестируйтеmethodB
напрямую, если вам нужно.2. Ты же не хочешь насмехаться
ClassA
. Для кода, который вы показали, вам вообще не нужен Mockito. Вы не можете тестироватьmethodB
самостоятельно, это часть реализацииClassA
. Если ему нужны собственные тесты (вместо того, чтобы тестироваться с помощью вызововmethodA
), создайте новый класс и внедрите егоClassA
.