Méthode protégée par test unitaire en C # en utilisant Moq

Il est venu à mon attention ces derniers temps que vous pouvez unité de test de classes de base abstraites à l'aide Moq plutôt que de créer un mannequin de classe dans le test qui implémente la classe de base abstraite. Voir Comment utiliser moq pour tester une méthode concrète dans une classe abstraite? E. g. vous pouvez le faire:

public abstract class MyAbstractClass 
{
    public virtual void MyMethod()
    {
        //...    
    }
}

[Test]
public void MyMethodTest()
{
    //Arrange            
    Mock<MyAbstractClass> mock = new Mock<MyAbstractClass>() { CallBase = true };

    //Act
    mock.Object.MyMethod();

    //Assert
    //... 
}

Maintenant, je me demandais si il y avait une technique similaire pour me permettre de test des membres protégés sans avoir à créer une classe wrapper. I. e. comment faites-vous tester cette méthode:

public class MyClassWithProtectedMethod
{
    protected void MyProtectedMethod()
    {

    }
}

Je suis conscient de l'Moq.Noms protégé, cependant, aussi loin que je peux voir, il ne vous permet de configurer les attentes avec, par exemple,

mock.Protected().Setup("MyProtectedMethod").Verifiable();

Je suis également conscient que la réponse la plus évidente ici est "ne pas tester les méthodes protected, seulement tester les méthodes publiques", cependant c'est un autre débat! Je veux juste savoir si c'est possible en utilisant Moq.

Mise à jour: ci-dessous est la façon dont je voudrais tester cette normalement:

public class MyClassWithProtectedMethodTester : MyClassWithProtectedMethod
{
    public void MyProtectedMethod()
    {
        base.MyProtectedMethod();
    }
}

Merci d'avance.

source d'informationauteur magritte