我正在尝试弄清楚这个 Mock(使用 Moq 框架)是如何工作的,但我对返回 void 的方法有点困惑。
原始对象具有以下方法/属性:
void Add(Person entity);
void Save();
IQueryable<Person> Persons;
Add 方法调用 InsertOnSubmit
(它是 Linq to sql),Save 方法调用 Context.SubmitChanges()
. Person 的属性返回 Table<News>
对象。
但是我不确定如何模拟这些方法,因为我显然不能使用 Returns()
.
或者我的设计是否意味着我实际上无法正确模拟对象?
最佳答案
这取决于您打算测试什么。
当您想测试被测类与其他类之间的交互时,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 而不是简单设置。
关于c# - 最小起订量无效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4889064/