如何对调用私有方法并依次调用 Web 服务方法的 public 方法进行单元测试
How to unit test a public method that calls private method and that in turn calls a web service method
设置如下:
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);
}
}
我需要测试 public doSomething
方法来检查是否过滤了 invalidObjects。如您所见,它将 objects
传递给私有 doPrivateStuff
方法。该方法过滤掉无效对象并将有效对象发送到 Web 服务方法。该网络服务方法没有 return 任何东西。所以我不知道是否只有有效的对象被发送到 web 服务方法。你建议我做什么来测试这个案例?我正在使用 Mockito 框架来模拟对象。
您无法测试此方法的主要原因是您在 class.
中创建了 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
方法
设置如下:
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);
}
}
我需要测试 public doSomething
方法来检查是否过滤了 invalidObjects。如您所见,它将 objects
传递给私有 doPrivateStuff
方法。该方法过滤掉无效对象并将有效对象发送到 Web 服务方法。该网络服务方法没有 return 任何东西。所以我不知道是否只有有效的对象被发送到 web 服务方法。你建议我做什么来测试这个案例?我正在使用 Mockito 框架来模拟对象。
您无法测试此方法的主要原因是您在 class.
中创建了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
方法