我是Moq的新手,我刚看了莫青的复数视频,所以我觉得有权去写一些测试.我有一个基类让我们说Sheet实现了一个接口ISheet.Sheet是页面的基类:
abstract class Sheet: ISheet
{
public virtual void CreateSheet() // Defined in ISheet
{
}
public virtual void BuildSheet() // Defined in ISheet
{
}
//and some abstract methods, etc.
}
public class Page : Sheet
{
public override void CreateSheet()
{
BuildSheet(); // Base class implementation
}
}
Run Code Online (Sandbox Code Playgroud)
我覆盖了基类中的一个方法CreateSheet(),但我想测试BuildSheet()基类中的方法是从我的派生类调用的:
所以在我的测试类中,我将SQ替换为接口而不是接口
var MockSheet = new Moq<Page>();
Run Code Online (Sandbox Code Playgroud)
调用方法:
var actual = MockSheet.Object.CreateSheet();
Run Code Online (Sandbox Code Playgroud)
然后验证
MockSheet.Verify(x => x.BuildSheet(), Times.AtLeastOnce);
Run Code Online (Sandbox Code Playgroud)
相反,我得到MockException"在模拟上预期调用至少一次,但从未执行过.永远不会调用CreateSheet方法.如果我将CreateSheet方法更改为:
public void CreateDocSheet() // removed override
{
BuildSheet() …Run Code Online (Sandbox Code Playgroud)