我有一个这样的班级:
public class MyClass
{
public async Task MethodA()
{
await DoSomething();
}
public Task MethodB()
{
return MethodA();
}
}
我需要测试MethodB调用MethodA。
但是我该如何验证呢?
我正在尝试:
var myClassMock = new Mock<MyClass>();
myClassMock.VerifyAll();
await myClassMock.Object.MethodB();
myClassMock.Verify(d => d.MethodA(), Times.Once);
并收到NotSupportedException:对非虚拟(在VB中可重写)成员的无效验证:d => d.MethodA()。
我可以在不使用其他模拟框架的情况下进行实际测试吗?
答案 0 :(得分:0)
这无论如何都行不通,因为您在模拟游戏中调用MethodB()
并不是真实的事情。您想模拟MethodA()
,但使用MethodB()
的实际实现。这称为部分模拟。有关具体操作,请参见Using moq to mock only some methods。
答案 1 :(得分:0)
仅当模拟接口时,或者如果它是具体的类并且该方法是虚拟的时,才可以模拟(或验证)方法。
DoSomething()是否依赖任何依赖项?如果没有,您可以在没有Moq的情况下进行单元测试。如果是这样,您可以模拟那些依赖项并在那里进行验证。