2015-12-22 3 views
3

Из 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(), или я должен идти с отдельными тестами?

+0

Вы можете поместить материал внутри тела цикла в вспомогательный метод, который также отвечает за создание mocks. –

ответ

3

Возможно, вы захотите попробовать использовать parameterized tests или the zohhak framework, чтобы у вас было 1 тестовый прогон для каждой комбинации булевых значений. В этом случае нет необходимости перезапускать издевательства.

Смежные вопросы