如何对调用私有方法的公共方法进行单元测试,然后调用web服务方法



设置:

 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方法是用正确的参数调用的

相关内容

  • 没有找到相关文章

最新更新