假设我有以下要模拟的接口(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
}
}
或者我是否为每个不同的模拟实现创建一个新的模拟类?外汇。 EmptySearcher
和 HTTPSearcher
?
最佳答案
我建议您使用 Java 模拟工具,例如 jMock或 Mockito这将通过不让您自己编写模型工具而是编写好的模型来节省您一些时间 :)
使用 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/