我想存根一个存储库类来测试另一个具有存储库的类(Holder类).存储库接口支持CRUD操作,并且有很多方法,但我对Holder类的单元测试只需要调用其中的两个.存储库界面:
public interface IRepo {
public void remove(String... sarr);
public void add(String... sarr);
//Lots of other methods I don't need now
}
我想创建一个存储库模拟,它可以存储实例,定义仅用于添加和删除的逻辑,还提供了一种在调用添加和删除后检查存储在其中的内容的方法.
如果我做:
IRepo repoMock = mock(IRepo.class);
然后我有一个愚蠢的对象,对每种方法都没有任何作用.没关系,现在我只需要定义添加和删除的行为.
我可以创建一个Set< String>和存根只有那两个方法来处理集合.然后我将实例化一个具有IRepo的Holder,注入部分存根模拟,并在执行持有者之后,检查该集以验证它包含它应该是什么.
我设法使用不推荐使用的方法stubVoid部分地删除了一个void方法,例如remove:
Set mySet = new HashSet<>();
stubVoid(repoMock).toAnswer(new Answer() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
String[] stringsToDelete = (String[]) args[0];
mySet.removeAll(Arrays.asList(stringsToDelete));
return null;
}
}).on().remove(Matchers.anyVararg());
但是已被弃用,并且它比为IRepo创建部分实现要好得多.有没有更好的办法?
注意:Java 7只应答,这应该在Android中运行.