Какова область применения юнит-тестов? - PullRequest
3 голосов
/ 27 февраля 2011

Меня убедили в полезности модульных тестов, но я действительно не понимаю правила для них ..

Если у меня есть класс, связанный с другим

public class MyClass
{       
    private SecondClass MySecondClass;

    public MyClass()
    {
        this.MySecondClass = new SecondClass ();
    }
}

поле приватное, а у Myclass есть такой метод:

    public ThirdClass Get()
    {
        return this.MySecondClass.Get();
    } 

Как я могу проверить это ?? Я предполагаю, что должен проверить, правильно ли MyClass.get() вызывает MySecondClass.Get()! Но я не могу сделать макет из SecondClass и назначить его первому, потому что это частное поле. Поэтому я действительно задаюсь вопросом, как это можно проверить ..

Спасибо

1 Ответ

4 голосов
/ 27 февраля 2011

Вы не можете легко выполнить модульное тестирование, потому что экземпляр жестко закодирован. Вы можете использовать конструктор инъекций, где вы могли бы посмеяться над этим:

public class MyClass
{       
    private SecondClass _mySecondClass;

    public MyClass(SecondClass mySecondClass)
    {
        _mySecondClass = mySecondClass;
    }

    public ThirdClass Get()
    {
        return _mySecondClass.Get();
    } 
}

Теперь в вашем модульном тесте вы можете предоставить любой экземпляр этого класса, который вам нравится. Это принцип инверсии контроля. Классы больше не отвечают за создание экземпляров своих зависимостей, а являются потребителями тех классов, которые передают зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...