Добрый день. Предположим у меня есть примерно такой класс:
public class MyClass
{
public MyClass(Iprovider provider)
{
_provider = provider;
}
public Foo[] LoadFoo(string url)
{
return _provider.GetData(url, MyConverter);
}
private Foo[] FooConverter(string)
{
// тут некая большая логика конвертации
}
private readonly IProvider _provider;
}
в качестве IProvider передается такой класс:
public class Provider: IProvider
{
public T GetData<T>(string url, Func<string, T> converter)
{
using (var client = new WebClient())
{
string data = client.DownloadString(url);
return converter(data);
}
}
}
Я хотел бы покрыть класс MyClass тестами, но не очень понимаю, как это сделать. Дело в том, что вся его логика сосредоточена в методе GetData
класса Provider
и в методе FooConverter
. Предположим в юнит тесте я подменю Provider на некий ProviderMOck, например такой:
public class ProviderMock: IProvider
{
public T GetData<T>(string url, Func<string, T> converter)
{
return Activator.CreateInstance<T>();
}
}
Но тут возникает вопрос: что тогда тестировать? Ведь получится, что при таком моке даже не используется метод FooConverter
. Написать что-то типа
[Test]
public void Test()
{
var mock = new ProviderMock();
var myclass = new MyClass(mock);
var foo = myclass.LoadFoo(String.Empty);
Assert.NotNull(foo);
}
Но это по сути тест ради теста. А вот основная логика (конвертация с помощью FooConverter
) так и остаётся не протестированной. Как быть в таком случае?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
После обновления Unity 20172
Есть программа,которая должна выводить слово,где буквы заменены на символ '_' и пользователь по 1 букве угадывает этого словоПроблема в том,что...
Имеется строка (появляется после клика по дереву):