Как я должен использовать mockito для объекта внутри объектов, а затем значение - PullRequest
0 голосов
/ 13 января 2020

если у меня есть код, подобный этому object1.object2.object3, а затем object3, возвращающее значение. Но проблема в том, что у меня нет подключения к базе данных для возврата этих значений, и эти объекты поступают из файла импорта (.jar), мне нужно проверить, возвращают ли объекты правильные значения или нет. Может ли какой-нибудь помочь мне протестировать этот фреймворк, используя mockito и junit.

Ответы [ 2 ]

0 голосов
/ 13 января 2020

давайте возьмем пример кода

String streetNumber = project.getEmployeeById("1001").getAddress().getStreetNumber();

Теперь этот код должен быть реорганизован как

Employee emp = project.getEmployeeById("1001");
Address address = emp.getAddress();
String streetNumber = address.getStreetNumber();

. В вашем тестовом случае вы можете макетировать emp и adsress объекты

Employee emp = mockito.mock(Employee.class);
Address add = new Address();
add.setStreetNumber("123-gg");
mockito.when(project.getEmployeeById("1001")).thenReturn(emp);
mockito.when(emp.getAddress()).thenReturn("add");
0 голосов
/ 13 января 2020

Поскольку вы пишете модульный тест, а не интеграционный тест, просто смоделируйте object2 и покончите с этим. Тест не должен знать или заботиться о том, существует ли даже объект 3.

Если вы вызываете object3 напрямую, вы нарушаете закон Деметры и должны сначала решить эту проблему.

Закон Деметры:

  • Каждая единица должна иметь только ограниченные знания о других единицах: только единицы, «тесно» относящиеся к текущей единице.
  • Каждый юнит должен разговаривать только со своими друзьями; не разговаривайте с незнакомцами.
  • Поговорите только со своими ближайшими друзьями.

из wikipedia . Другими словами. Код должен взаимодействовать только с объектами, которые он сам создал или которые были внедрены непосредственно в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...