Первый макет метода, применяемого всегда - PullRequest
1 голос
/ 16 октября 2019

Я хочу протестировать несколько случаев в методе путём проверки внешней зависимости, чтобы возвращать разные результаты для каждого теста. Но 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 выдает исключение, которое не соответствует ожиданиям. Может я что-то упустил?

1 Ответ

2 голосов
/ 16 октября 2019

Пробовали ли вы использовать метод doReturn?

doReturn(DATA).when(validator).filter(DATA)

, который можно импортировать из org.mockito.Mockito.doReturn;

Отредактировано: в вашей реализации кода может быть ошибка:

data = validator.filter(data);
...