以下是设置:
public class ClassToTest{
public void doSomething(ObjectToWorkOn[] objects){
doPrivateStuff(objects);
}
private void doPrivateStuff(ObjectToWorkOn[] objects){
List<ObjectToWorkOn> validObjects=new ArrayList<ObjectToWorkOn>();
for(ObjectToWorkOn obj:objects){
if(obj.isValid())
validObjects.add(obj);
}
SomeWebService ws=new SomeWebService();
ws.processObjects(validObjects);
}
}
我需要测试公共doSomething
方法以检查是否过滤了invalidObjects。如您所见,它将objects
传递给私有doPrivateStuff
方法。并且该方法过滤掉无效对象并将有效对象发送到Web服务方法。该Web服务方法不返回任何内容。所以我不知道是否只有有效的对象被发送到Web服务方法。你有什么建议我能够测试这个案子?我正在使用Mockito框架来模拟对象。
答案 0 :(得分:3)
您无法测试此方法的主要原因是您在班级中创建了SomeWebService
。
要解决此问题,您应该inject SomeWebService
。
public class ClassToTest{
private readonly ISomeWebService someWebService;
public ClassToTest(ISomeWebService someWebService)
{
this.someWebService = someWebService;
}
public void doSomething(ObjectToWorkOn[] objects){
doPrivateStuff(objects);
}
private void doPrivateStuff(ObjectToWorkOn[] objects){
List<ObjectToWorkOn> validObjects=new ArrayList<ObjectToWorkOn>();
for(ObjectToWorkOn obj:objects){
if(obj.isValid())
validObjects.add(obj);
}
someWebService.processObjects(validObjects);
}
}
现在,您可以在测试中模拟ISomeWebService
依赖项,并验证是否使用正确的参数调用了processObjects
方法