c# - 最小起订量无效方法

标签 c# unit-testing mocking moq

我正在尝试弄清楚这个 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/

相关文章:

c# - CodeRefactoringProvider 中带有 ArgumentList 的 ObjectCreationExpression

c# - 如何使用 `using` 语句对方法进行单元测试?

java - 如何正确测试java中类的内部方法

unit-testing - 如何在对模块进行单元测试时模拟导入的子例程

python - 如何测试python中模拟调用的值是否在可能值的范围内

c# - 如何在将加载到 Redis 的 LUA 脚本上重用代码?

c# - 在 web.config 中为 dev、qa 和 prod 设置 Entity Framework 连接字符串时遇到问题

java - ServerSocket.accept()方法的内部实现?

c# - 如何使用 asp.net mvc 和单元测试组织代码和测试

android - Mocking Volley Network 模拟网络错误