【发布时间】:2016-06-12 17:43:15
【问题描述】:
我有一个班级,负责构建用于导出的 PPT 幻灯片。为了对此进行单元测试,我创建了一个接口,以便可以使用 Moq 进行模拟;到目前为止一切都很好。但是,在尝试测试我的方法是否已被调用时,我遇到了困难。这是一个 void 方法,所以此时我只想知道该方法已被命中。
这是我的界面:
interface IPowerpointExporter
{
void AddSlides(int amount);
void setTitle(string title);
}
这是我的单元测试:
[TestMethod]
public void testPPTObject()
{
var mockPPT = new Mock<IPowerpointExporter>();
mockPPT.Setup(m => m.AddSlides(1)).Verifiable();
mockPPT.Object.AddSlides(1);
mockPPT.VerifyAll();
}
但是,当我打电话给AddSlides() 时,我得到了一个GeneratorException。对此的解释是我的 IPowerpointExporter 无法访问。我有一种感觉,这是因为我试图在接口上调用一个方法,但我不确定,因为此时我的对象位于mockPPT.Object.AddSlides();。
请注意,我还尝试了以下尝试使用实际对象而不是 Interface.Object。这也给出了同样的例外:
[TestMethod]
public void testPPTObject()
{
var mockPPT = new Mock<IPowerpointExporter>();
mockPPT.Setup(m => m.AddSlides(1)).Verifiable();
ExportPowerPoint temp = (ExportPowerPoint)mockPPT.Object;
temp.AddSlides(1);
mockPPT.VerifyAll();
}
使用 Moq 如何检查我的方法是否已被调用?我在上面做的事情是否正确?
【问题讨论】:
-
看来你正在测试你的模拟。您应该使用 IPowerpointExporter 测试代码,并验证(模拟)接口上的方法是否被调用
标签: c# unit-testing moq