【问题标题】:Moq a void method起订量作废方法
【发布时间】:2011-02-03 16:55:12
【问题描述】:

我试图弄清楚这个 Mock(使用 Moq 框架)的东西是如何工作的,但是我对返回 void 的方法有点困惑。

原始对象具有以下方法/属性:

void Add(Person entity);
void Save();
IQueryable<Person> Persons;

Add 方法调用InsertOnSubmit(它是Linq to sql),Save 方法调用Context.SubmitChanges()。 Person 的属性返回 Table&lt;News&gt; 对象。

我不确定如何模拟这些方法,因为我显然不能使用Returns()

或者我的设计是否意味着我实际上不能正确地模拟对象?

【问题讨论】:

  • 如果没有进一步的上下文,很难给出一个好的答案。

标签: c# unit-testing mocking moq


【解决方案1】:

这取决于你打算测试什么。

当您想要测试正在测试的类和其他类之间的交互时,Moq 可以为您提供很大帮助。

在您描述的情况下,您可能正在测试一个使用具有上述方法和属性的类的类。要验证交互,您需要检查是否使用预期参数调用了 Add 方法、是否调用了 Save 方法以及是否引用了 Persons 属性以读取结果。这可以通过以下方式实现:

var mockedClass = new Mock<IDaoClass>();
var classUnderTest = ...

mockedClass.SetupGet(m => m.Persons).Returns(new List<Person>().AsQueryable());

classUnderTest.DoSomething();

mockedClass.Verify( m => m.Add(It.IsAny<Person>())); 
mockedClass.Verify( m => m.Save());

如果您想测试其他东西并提​​供这些方法的 stub 实现,那么您可能只想创建一个测试实现或考虑使用 Moq 设置和以 lambda 表示的函数,而不是简单设置。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2020-12-06
    • 2013-02-10
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多