Что является хорошим способом написания модульных тестов для кода с защищенными объектами 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 в конструкторе вы могли предоставить вызывающему объекту этот экземпляр. В этом случае вы легко сможете заменить его на макет или даже заглушку.

Вы пытались получить UTMyClass из MyClass?

Другие вопросы по тегам