假设我们正在测试一个 C 类,它有 2 个方法 M1 和 M2,其中 M1 在执行时调用 M2。
测试M2是可以的,但是我们如何测试M1呢?困难在于,如果我没有误解的话,我们需要模拟 M2。
如果是这样,我们如何在测试同一个类中定义的方法时模拟另一个方法?
[编辑]
C 类没有基类。
最佳答案
您可以通过设置 CallBase 来做到这一点。模拟上的属性到 true
.
例如,如果我有这个类:
public class Foo
{
public virtual string MethodA()
{
return "A";
}
public virtual string MethodB()
{
return MethodA() + "B";
}
}
我可以设置 MethodA 并调用 MethodB:
[Fact]
public void RunTest()
{
Mock<Foo> mockFoo = new Mock<Foo>();
mockFoo.Setup(x => x.MethodA()).Returns("Mock");
mockFoo.CallBase = true;
string result = mockFoo.Object.MethodB();
Assert.Equal("MockB", result);
}
关于unit-testing - 如何模拟也属于目标类本身的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3907507/