Wie zum erstellen von Mock für die abstrakte Basis-Klasse mit MOQ-framework?

Möchte ich schreiben unit-tests für MyClass aber seine Basis-Klasse ist eine abstrakte Klasse.

public class MyClass : AbstractBaseClass
{
}

Möchte ich verspotte die AbstractBase Klasse, so dass ich überspringen können einige der Logik in seinem Konstruktor beim erstellen der MyClass-Instanz, die ich testen möchte. Gibt es trotzdem kann ich dies tun?

//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.
   }
 }
Sie haben ein design-Problem. AbstractClass ist hardcoding Instanziierung einer Abhängigkeit in seiner en. Wenn Methoden für diese Abhängigkeit sind, was Sie wollen, zu verspotten, müssen Sie ändern die AbstractClass Tor zu nehmen, in die Abhängigkeit. Wenn Sie können etwas erläutern, was diese Methode wird intern, vielleicht werden Sie einige bessere Antworten

InformationsquelleAutor Dexterslab | 2011-05-23

Schreibe einen Kommentar