2012-02-16 95 views
1

即时通讯新的我仍然有很多问题,其中一个问题是如何测试一个无效的方法!如何用Moq测试void方法?

我有这样一个与REFFERENCE传递参数,可以和我不知道怎么考到:(这只是一个测试,不是我的真法)

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; 
     } 
    }    

能someoen帮助吗?谢谢!

回答

5

假设userDAO注入的依赖,并能嘲笑我会做以下测试:在User.Cod通过

  1. 断言GetSomething()叫上嘲笑userDAO
  2. 断言返回引用字符串cod ==我们 用于创建嘲笑userDAO
  3. 断言返回参考串name ==在User.Cod通过了 我们用来创建嘲笑userDAO

我以避免ref参数虽然同意,我建议重构作为建议其他答案通过@Tim库尔斯

+0

这个概念现在还不是很清楚..我如何模拟我的方法中的道,在我的测试中?我将如何嘲笑在该方法内部使用的结果?因为我不能用params传递它,他不是其中之一!对不起,我还是很noob! – Otuyh 2012-02-16 19:44:11

+0

你可以传递一个模拟'userDAO'作为构造参数给包含'ReplaceCenter'方法的类 – BrokenGlass 2012-02-16 19:46:08

+0

Oooohh!是的是的!谢谢!现在就做! – Otuyh 2012-02-16 19:47:19

3

you should try to avoid ref and out parameters.使用包含这两个属性的对象。这会使你的设计更清洁,你的工作更清洁......

编辑:如果你真的想MOQ out参数使用,你可以找到一个例子here

+0

+1为避免ref和out – 2012-02-16 19:05:21

+0

感谢您的提示,生病尝试做到这一点!我仍然在学习 – Otuyh 2012-02-16 19:45:09

1

只是在PARAMS测试值在调用此方法后,嘲讽userDAO的控制它返回(NULL,鳕鱼,名字)

+0

如果他们不通过参考?我还能做吗? – Otuyh 2012-02-16 19:44:51

+0

如果你没有通过引用来传递它们,你是否返回任何东西?如果是这样的话,如果它只是对其他东西进行操作,则测试返回值(s),然后测试这些依赖关系是否被调用了正确的参数 – Jaime 2012-02-16 21:00:59

0

一个无效的方法暗示着会有某种副作用。我一般建议避免他们,如果可能的话,但是当你需要测试一个拇指一般规则是:

  1. 断言你的嘲弄所有期望他们呼吁。
  2. 如果可能的话,断言模拟被调用了特定的参数值。这对无效方法更重要,因为您正在测试副作用。
  3. 断言你可以做到的每一个副作用,包括那些不应该改变的副作用。

真的,这些断言应该用于非无效方法,也许更多的是为了防止意想不到的副作用,而不是测试预期的副作用。 (国际海事组织,一个功能应该尽可能没有副作用。)