При модульном тестировании выполняются функции класса, которые имеют частные функции, требующие оперативной функциональности. Как можно было бы проверить это?
Например:
public class Foo
{
public int methodA()
{
int val = goOnlineToGetVal();
return val;
}
private int goOnlineToGetVal()
{
CloudService c = new CloudService();
int oval = c.getValueFromService();
return oval;
}
}
Если бы я тестировал функцию: 'methodA ()', он попытался бы использовать 'goOnlineToGetVal ()', который, в свою очередь, попытался бы выйти в Интернет, однако, если бы этот тест был выполнен без функциональности. Как бы я прошел 100% покрытие класса, не выходя в интернет?
unit-testing
junit
Бен сошел с ума Euden
источник
источник
Ответы:
new CloudService()
И есть твоя проблема.
Современный дизайн ОО рекомендует передавать такого рода зависимости, а не создавать их напрямую. Это может быть передано в саму функцию или в класс во время создания. Он также может быть захвачен или агрегирован контейнером Inversion of Control, если такая сложность оправдана.
В этот момент становится довольно тривиальным использовать поддельный / поддельный сервис для предоставления вам ваших «онлайн» данных во время тестирования. Более того, он позволяет вашему программному обеспечению быть достаточно гибким, чтобы вы могли быстро адаптироваться, если какой-нибудь (государственный?) Клиент придет и не захочет использовать облако для своих ценностей. Или вы хотите сбросить один облачный провайдер за другим. Или...
источник
Я бы реализовал это так:
Интерфейс
ICloudService
может быть реализован либо с макетом для тестирования, либо с «настоящим» облачным сервисом. Когда конкретизацииnew CloudService()
являются обязательной для каждого вызоваgetValueFromService
, илиCloudService
от 3 - й партии API , который не может быть изменен, реализовать обертку, вытекающая изICloudService
и делают соответствующие вызовы.источник