Что является хорошим способом написания модульных тестов для кода с защищенными объектами C# (с использованием NMock и инфраструктуры NUnit)
При написании модульных тестов для одного класса, который содержит другие объекты, что лучше всего использовать
макет объектов, чтобы избежать тестов, зависящих от других классов.
Пример 1:
public class MyClass
{
protected MyObject _obj;
public MyClass()
{
_obj = new MyObject();
}
public object DoSomething()
{
//some work
_obj.MethodCall();
//more work;
return result;
}
}
Я бы предпочел не раскрывать защищенное значение для создания модульного теста для кода. Класс-обёртка будет
работать для тестирования, но есть ли лучший способ?
Пример 2:
public class MyClass
{
public object DoSomething()
{
//some work
MyObject obj = new obj(parameters);
_obj.MethodCall(Method1);
//more work;
return result;
}
public int Method1()
{ ... }
}
Аналогично приведенному выше примеру, но объект создается в методе, который я вызываю.
Пример 3:
public class MyClass
{
public object DoSomething()
{
//some work
obj.MethodCall(Method1);
//more work;
return result;
}
public int MethodA()
{ ... }
}
Есть ли способ проверить MethodA, когда он используется только в качестве делегата?
2 ответа
Я рекомендую вам взглянуть на внедрение зависимостей. Одно дело - использование фиктивных объектов, но если вы не используете что-то вроде TypeMock, которое в основном позволяет вам модифицировать ваш код на лету, вы хотите иметь способ внедрить экземпляры, от которых зависит ваш класс, если вы хотите избавиться от зависимостей. Таким образом, в примерах 1 я бы предложил, чтобы вместо нового экземпляра MyObject в конструкторе вы могли предоставить вызывающему объекту этот экземпляр. В этом случае вы легко сможете заменить его на макет или даже заглушку.