如何使用Moq测试void方法
本文关键字:void 方法 测试 Moq 何使用 | 更新日期: 2023-09-27 18:24:49
我是TDD的新手,我还有很多问题,其中一个问题是如何测试void方法!
我有一个通过引用的params,我不知道如何测试:(这只是一个测试,而不是我真正的方法)
public void ReplaceCenter(ref string cod, ref string name)
{
User user = userDAO.GetSomething();
if (user.Cod != null)
{
cod = user.Cod;
}
if (user.Name != null)
{
name = user.Name;
}
}
有人能帮忙吗?谢谢
假设userDAO
是作为依赖项注入的,并且可以被模拟,我会进行以下测试:
- 在模拟
userDAO
上调用了断言GetSomething()
- Assert返回了在User.Code中传递的引用字符串
cod
==用于创建模拟userDAO
- Assert返回了在User.Code中传递的引用字符串
name
==我们曾经创建过模拟userDAO
不过,我同意避免使用ref参数,我建议按照@Tim Cools
您应该尽量避免ref和out参数。使用包含这两个属性的对象。这会让你的设计更干净,你的工作也更干净。。。
edit:如果你真的想使用moq输出参数,你可以在这里找到一个例子
只需在调用方法后测试params中的值,模拟userDAO来控制它返回的内容(null、cod、name)
- 断言对mock的所有预期调用都已完成
- 如果可能的话,断言mock是用特定的参数值调用的。这对于void方法更为重要,因为您正在测试副作用
- 断言你能断言的每一个副作用,包括那些不应该改变的副作用
实际上,这些断言也应该针对非void方法,也许更多的是为了防止意外的副作用,而不是测试预期的副作用。(IMO,如果可能的话,一个函数应该没有任何副作用。)