最近我注意到,可以使用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();
}
}
提前感谢。
.Setup(...)
没有.Returns(..)
- API文档链接似乎已经失效了,而且我现在也没有VS - 你确定没有返回值吗?- bzlms的帖子似乎表明曾经有一个... - Random Dev