Из Mockito.reset()
документации:Соответствующее использование Mockito.reset()?
пользователей Смарт Mockito вряд ли использовать эту функцию, потому что они знают, что это может быть признаком плохих испытаний. Обычно вам не нужно сбросить свои макеты, просто создайте новые макеты для каждого метода тестирования. Вместо сброса(), пожалуйста, подумайте о том, чтобы написать простые, малые и сфокусированные методы тестирования по длительным, чрезмерным тестам.
У меня есть servicemethod, который вызывается из интерфейса, с DTO, содержащий 3 Booleans в качестве единственного аргумента - давайте назовем их a
, b
и c
:
public void executeService(AbcDTO dto) { (...) }
В зависимости от значений Booleans , служба затем называет aManager.a()
, bManager.b()
и cManager.c()
. В самом деле, я мог бы сделать это в трех отдельных сервисах, но я бы предпочел.
Я хотел UnitTest все возможные комбинации из booleanvalues a
, b
и c
, так что я написал что-то вроде:
@Test
public void testABC() {
// Mock aManager, bManager, cManager
for(boolean a : asSet(true, false)) {
for(boolean b : asSet(true, false)) {
for(boolean c : asSet(true, false)) {
AbcDTO dto = new AbcDTO(a, b, c);
service.executeService(dto);
verify(aManager, times(a ? 1 : 0)).a();
verify(bManager, times(b ? 1 : 0)).b();
verify(cManager, times(c ? 1 : 0)).c();
reset(aManager, bManager, cManager);
}
}
}
}
Я думаю, что это тест, который четко указывает на цель executeService
для будущих читателей, но он работает только зеленым цветом с Mockito.reset()
. После прочтения документации я не уверен, что это путь.
Я считаю, что у меня есть два варианта:
- Используйте
Mockito.reset()
- Писать отдельные UnitTests для каждой комбинации (около 8 тестов с большим количеством копирования вставки)
Вопрос:
Это правильное, приемлемое использование Mockito.reset()
, или я должен идти с отдельными тестами?
Вы можете поместить материал внутри тела цикла в вспомогательный метод, который также отвечает за создание mocks. –