В последнее время мне стало интересно, что вы можете unit test абстрактные базовые классы использовать Moq, а не создавать фиктивный класс в тесте, который реализует абстрактный базовый класс. См. Как использовать moq для тестирования конкретного метода в абстрактном классе? вы можете сделать:
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
// ...
}
Теперь мне было интересно, есть ли подобная техника, позволяющая мне проверять защищенные члены без необходимости создавать класс-оболочку. То есть как вы протестируете этот метод:
public class MyClassWithProtectedMethod
{
protected void MyProtectedMethod()
{
}
}
Я знаю обособленное пространство имен Moq.Protected, однако, насколько я вижу, он позволяет вам настраивать ожидания, например,
mock.Protected().Setup("MyProtectedMethod").Verifiable();
Я также знаю, что очевидным ответом здесь является "не тестировать защищенные методы, а только проверять публичные методы", однако это еще одна дискуссия! Я просто хочу знать, возможно ли это с помощью Moq.
Обновление: ниже показано, как я обычно тестировал это:
public class MyClassWithProtectedMethodTester : MyClassWithProtectedMethod
{
public void MyProtectedMethod()
{
base.MyProtectedMethod();
}
}
Спасибо заранее.