Утверждение результата метода внутри метода в Mockito

#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 .