设置:
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框架来模拟对象。
无法测试此方法的主要原因是您在类中创建了SomeWebService
。
要解决这个问题,你应该注入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
方法是用正确的参数调用的