Quiero escribir pruebas unitarias para MyClass pero su clase base es una clase abstracta.¿Cómo crear Mock para la clase base abstracta utilizando el marco MOQ?
public class MyClass : AbstractBaseClass
{
}
Quiero burlarse de la clase AbstractBase, de modo que pueda pasar por alto algunos de la lógica en su constructor cuando se crea la instancia MiClase quiero probar. ¿Hay alguna forma de que pueda hacer esto?
//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.
}
}
Tiene un problema de diseño. AbstractClass es la creación de instancias de codificación rígida de una dependencia en su ctor. Si los métodos de esta dependencia son lo que desea simular, debe cambiar el ctor de AbstractClass para que tome en cuenta la dependencia. Si puede profundizar en lo que hace este método internamente, tal vez obtenga mejores respuestas – Gishu