Итак, прежде всего, нам необходимо уяснить, что именно вы проводите модульное тестирование.Если вы пытаетесь выполнить модульное тестирование someServiceMethod
внутри MainClass
, то это означает, что вам НЕ следует также тестировать функциональность someRepository
.Идея состоит в том, что каждый модульный тест должен проверять только эту единицу кода.Таким образом, для этого нам нужно использовать заглушки в качестве замены для того, что на самом деле происходит, когда вы вызываете методы, принадлежащие другим классам.Затем мы написали бы другой модульный тест только для someRepository.getSomeData()
, чтобы подтвердить, что он также работает как задумано.Таким образом, когда позже мы получим сообщение об ошибке, мы точно будем знать, где мы столкнулись с проблемой.
Другая проблема, которую я вижу, заключается в явном несоответствии типов возврата для getResult()
в C
,Метод говорит, что возвращает ResultClass
, но когда вы вызываете getSomeData
, вы ожидаете объект ABC
.Либо вы не указали детали, в которых вы конвертировали объект обратно в ResultClass
, либо это ошибка.Я собираюсь предположить первое, если вы не скажете иначе.
Имея это в виду, давайте напишем наш тест.Вот как я бы написал тест:
@RunWith(SpringRunner.class)
public class MainClassTest {
@Mock
C c;
@InjectMocks
MainClass mainClass;
@Test
public void testSomeServiceMethod {
ResultClass resultClass = new ResultClass(); //relevant constructor details here, mockbean, etc. you get the idea
//set any desired data for resultClass here
Mockito.when(c.getResult(anyString(), anyString(),
anyInt(), anyInt(), any(List.class), anyBoolean()))
.thenReturn(resultClass);
ResultClass newResult = mainClass.someServiceMethod();
//relevant test assertions here
}
}
Как вы можете видеть, мы создаем ResultClass
в тесте и сообщаем Mockito, что нужно возвращать его при вызове getResult
вместо того, что вы бы сделалиобычно ожидаю, что он вернется.Хотя теперь функциональность может показаться ограниченной, это предпочтительнее, поскольку мы тестируем только MainClass
, а не остальные вызовы наших методов.
В дополнение к этому мы можем (и должны) писать тесты для getResult
в C
и getSomeData
в SomeRepository
.Я оставлю это вам, чтобы написать эти тесты.
РЕДАКТИРОВАТЬ: случайно опубликовал немного раньше, исправляя сейчас.