Как выполнить модульное тестирование общедоступного метода, который вызывает закрытый метод и который в свою очередь вызывает метод веб-службы

Вот настройки:

 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 метод был вызван с правильными аргументами

Другие вопросы по тегам