And*_*ewC 5 c# unit-testing moq mocking
我试图弄清楚这个Mock(使用Moq框架)的东西是如何起作用的,但是我对返回void的方法感到有些困惑.
原始对象具有以下方法/属性:
void Add(Person entity);
void Save();
IQueryable<Person> Persons;
Run Code Online (Sandbox Code Playgroud)
Add方法调用InsertOnSubmit(它是Linq to sql)和Save方法调用Context.SubmitChanges().Person的属性返回Table<News>对象.
我不知道如何嘲笑这些方法,因为我显然无法使用Returns().
或者我的设计是否意味着我实际上无法正确地模拟对象?
这取决于您打算测试什么。
当您想要测试正在测试的类与其他类之间的交互时,起订量可以为您提供很大帮助。
在您描述的情况下,您可能正在测试一个使用具有上述方法和属性的类的类。要验证交互,您需要检查是否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());
Run Code Online (Sandbox Code Playgroud)
如果您想测试其他内容并提供这些方法的存根实现,那么您可能只想创建一个测试实现,或者考虑使用 Moq 设置和以 lambda 表示的函数,而不是简单的设置。