Comment créer des maquettes pour la classe de base abstraite à l'aide de MOQ cadre?

Je veux écrire des tests unitaires pour MyClass mais sa classe de base est une classe abstraite.

public class MyClass : AbstractBaseClass
{
}

Je veux de se Moquer de l'AbstractBase classe, de sorte que je ne peux ignorer la logique dans son constructeur lors de la création de l'instance de Maclasse que je veux tester. Est-il de toute façon je peux le faire?

//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.
   }
 }
  • Vous avez un problème de conception. AbstractClass est coder en dur l'instanciation d'une dépendance dans son ctor. Si les méthodes de cette dépendance sont ce que vous voulez de fantaisie, vous devez modifier le AbstractClass ctor à prendre dans la dépendance. Si vous pouvez élaborer sur ce que cette méthode n'est à l'interne, peut-être vous obtenir quelques réponses de meilleure qualité
InformationsquelleAutor Dexterslab | 2011-05-23