java - 应该如何处理模拟对象的差异?

标签 java unit-testing junit mocking

假设我有以下要模拟的接口(interface):

搜索器.java

public interface Searcher {

    public String search();

    public void someMethod();

}

当我想为这个接口(interface)使用不同的模拟实现时,我该怎么办?例如,在一个测试中,我想让 search() 方法返回空字符串,在另一个测试中,我希望它开始执行一些 HTTP 请求等。

我是否封装了行为,例如 fx.将它放在 SearchBehaviour 接口(interface)中,然后为该接口(interface)编写实现:

public class SearcherMock implements Searcher {

    private SearchBehaviour searchBehaviour;

    public SearcherMock(SearchBehaviour searchBehaviour) {
        this.searchBehaviour = searchBehaviour;
    }

    @Override
    public String search() {
        return searchBehaviour.search();
    }

    @Override
    public void someMethod() {
        // Do something here
    }

} 

或者我是否为每个不同的模拟实现创建一个新的模拟类?外汇。 EmptySearcherHTTPSearcher

最佳答案

我建议您使用 Java 模拟工具,例如 jMockMockito这将通过不让您自己编写模型工具而是编写好的模型来节省您一些时间 :)

使用 Mockito 你可以做这样的事情(虽然没有测试):

import static org.mockito.Mockito.*;

Searcher mockedEmptySearcher = mock(Searcher.class);

// define how empty searcher should behave
when(mockedList.search()).thenReturn("");

关于java - 应该如何处理模拟对象的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028580/

相关文章:

java - 如何使用 jquery slider 过滤 100 条记录,而无需每次都访问服务器?

javascript - 模拟 Web 浏览器orientationchange 事件以使用 jasmine 测试绑定(bind)的事件处理函数

java - 即使没有抛出异常,JMock 也会导致 JUnit ExpectedException 通过

java - @ReplaceWithMock 不使用 Springmockito 注释进行模拟

java - CAS:用户以其他用户身份登录

java - 如何在请求中通过 id 引用实体

java - Mockito 参数捕获器和 only()

java - EasyMock 异常处理

java - BouncyCaSTLe:从证书签名请求中提取公钥信息

ruby-on-rails - after_create 回调在测试中不起作用,但在控制台中起作用