Я хочу протестировать несколько случаев в методе путём проверки внешней зависимости, чтобы возвращать разные результаты для каждого теста. Но when
всегда возвращает то, что определено в первый раз (в этом примере - пустой набор), и это нарушает следующие тесты. Если я запускаю тесты один за другим, они успешно проходят, но когда я запускаю весь класс, только первый тестовый тест и другие не пройдены.
Класс тестирования:
class ExampleTest {
@Mock
private Dao dao;
@Mock
private Validator validator;
@Spy
@InjectMocks
Controller controller;
@BeforeEach
void setUp() {
initMocks(this);
}
private final static Set DATA = Set.of("data1", "data2");
@Test
void firstTest() throws UserDashboardException, DashboardException, WidgetException {
when(validator.filter(DATA)).thenReturn(Collections.emptySet());
assertThrows(Exception.class, () -> controller.create(DATA));
}
@Test
void secondTest() throws UserDashboardException, DashboardException, WidgetException {
when(validator.filter(DATA)).thenReturn(DATA);
controller.create(DATA);
verify(dao, times(1)).create(eq(DATA));
}
}
Тестируемый класс:
public class Controller {
private Dao dao;
private Validator validator;
public Controller(Dao dao,Validator validator) {
this.dao = dao;
this.validator = validator;
}
public String create(Set<String> data) {
data = validator.filter(data);
if (data.isEmpty()) {
throw new Exception("Invalid data.");
}
return dao.create(data);
}
}
Итак, в обоих тестах метод create
выдает исключение, которое не соответствует ожиданиям. Может я что-то упустил?