Вопрос о тестировании класса

252
03 февраля 2018, 22:49

Добрый день. Предположим у меня есть примерно такой класс:

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) так и остаётся не протестированной. Как быть в таком случае?

READ ALSO
Замена символов на буквы

Замена символов на буквы

Есть программа,которая должна выводить слово,где буквы заменены на символ '_' и пользователь по 1 букве угадывает этого словоПроблема в том,что...

246
Использование GetFocusedRowIndex в двух разных окнах

Использование GetFocusedRowIndex в двух разных окнах

Имеется строка (появляется после клика по дереву):

217