Как создать Mock для абстрактного базового класса с помощью инфраструктуры MOQ?

Я хочу написать модульные тесты для MyClass, но его базовый класс - абстрактный класс.

public class MyClass : AbstractBaseClass
{
}

Я хочу имитировать класс AbstractBase , так что я могу пропустить часть логики в его конструкторе при создании экземпляра MyClass, который хочу протестировать. Можно ли это сделать?

//Unit Test
var test = new Mock<IInterface>();
var derivedclass = new DerivedClass(test.Object);

test.Setup(d=>d.MyMethod(It.IsAny<string>()).returns(2);
derivedclass.MyMethod("hello");


// Derived Class
class DerivedClass : AbstractClass{

     //constuctor
    public DerivedClass(IInterface interface){
        _interface = interface;
    }
    public MyMethod(string str){
        return 2;
    }
}

//Abstract Class
public abstract class AbstractClass
{

 // This method gets called when i create the  instance of the derived class in my unit   
  test..

   protected AbstractedClass() : this(new SomeOtherClass()){
       DoSomethingElse();    /// I want to skip this method or mock it.
   }
 }
6
задан forsvarir 1 July 2015 в 18:47
поделиться