Недавно я обратил внимание на то, что вы можете модульно тестировать абстрактные базовые классы, используя Moq, вместо того, чтобы создавать в тесте фиктивный класс, реализующий абстрактный базовый класс. См. Как использовать moq для тестирования конкретного метода в абстрактном классе? Например, вы можете сделать:
public abstract class MyAbstractClass
{
public virtual void MyMethod()
{
// ...
}
}
[Test]
public void MyMethodTest()
{
// Arrange
Mock mock = new Mock() { CallBase = true };
// Act
mock.Object.MyMethod();
// Assert
// ...
}
Теперь мне было интересно, есть ли подобный метод, позволяющий тестировать защищенные члены без необходимости создавать класс-оболочку . Т.е. как вы протестируете этот метод:
public class MyClassWithProtectedMethod
{
protected void MyProtectedMethod()
{
}
}
Я знаю пространство имен Moq.Protected, однако, насколько я могу судить, оно позволяет вам настраивать только ожидания, например,
mock.Protected().Setup("MyProtectedMethod").Verifiable();
Я также знаю, что очевидный ответ здесь - «не тестируйте защищенные методы, только тестируйте общедоступные методы», но это еще одна дискуссия! Я просто хочу знать, возможно ли это с помощью Moq.
Обновление: ниже показано, как я обычно это тестирую:
public class MyClassWithProtectedMethodTester : MyClassWithProtectedMethod
{
public void MyProtectedMethod()
{
base.MyProtectedMethod();
}
}
Заранее спасибо.