Как выполнить модульное тестирование общедоступного метода, который вызывает закрытый метод и который в свою очередь вызывает метод веб-службы
Вот настройки:
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
метод. И этот метод отфильтровывает недопустимые объекты и отправляет действительные объекты в метод веб-службы. Этот метод веб-сервиса ничего не возвращает. Поэтому я понятия не имею, были ли отправлены только допустимые объекты в метод веб-службы или нет. Что вы предлагаете мне сделать, чтобы иметь возможность проверить это дело? Я использую Mockito Framework для насмешек объектов.
1 ответ
Основная причина, по которой вы не можете протестировать этот метод, заключается в том, что вы создаете 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
метод был вызван с правильными аргументами