Unit prueba método protegido en C # usando Moq

Me llamó la atención últimamente que puedes probar las clases base abstractas usando Moq en lugar de crear una clase ficticia en la prueba que implemente la clase base abstracta. Ver¿Cómo usar moq para probar un método concreto en una clase abstracta? P.ej. tu puedes hacer

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
    // ... 
}

Ahora me preguntaba si había una técnica similar para permitirmetest miembros protegidos sin tener que crear una clase de contenedor. Es decir. ¿Cómo se prueba este método:

public class MyClassWithProtectedMethod
{
    protected void MyProtectedMethod()
    {

    }
}

Soy consciente del espacio de nombres protegido por Moq. Sin embargo, hasta donde puedo ver, solo le permite configurar expectativas con, por ejemplo,

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

También soy consciente de que la respuesta obvia aquí es "no pruebe los métodos protegidos, solo pruebe los métodos públicos", ¡sin embargo, ese es otro debate! Solo quiero saber si esto es posible usando Moq.

Actualizar a continuación es cómo probaría esto normalmente:

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

Gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta