java - 始终应用的方法的第一次模拟

标签 java spring unit-testing mockito

我想通过模拟外部依赖关系来测试方法中的一些案例,以便为每个测试案例返回不同的结果。但是 when 总是返回第一次定义的内容(在本例中 - 空集),这会破坏接下来的测试。 如果我逐个运行测试,它们会成功通过,但当我运行整个类(class)时,只有第一个测试通过,其他测试失败。

测试类:

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 方法都会抛出异常,这不是我所期望的。也许我错过了一些要点?

最佳答案

您尝试过 doReturn 方法吗?

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

可以从 org.mockito.Mockito.doReturn 导入;

已编辑:您的代码实现中可能存在错误:

data = validator.filter(data);

关于java - 始终应用的方法的第一次模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58408839/

相关文章:

java - 如何将 primefaces 上下文菜单添加到数据表标题?

java - 如何获取 .txt 文件单行中的整数数量?

Java - Tree 是 Node 的一个实例吗?

java - 具有容器安全性的 Spring Boot

c# - 使用 HttpClient 对发出 Http 请求的 Controller 进行单元测试

java - 如何按日期对数组数组进行排序?

java - 在 Spring 中将 .jsp 映射到 Controller

java - Spring Boot 光配置

unit-testing - SPRING Roo 项目 - 版本控制中应该保留什么

typescript ,单元测试 : Correct typing for Dispatching a Thunk with store. 从 redux-mock-store 发送