2012-02-16 96 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. 斷言你可以做到的每一個副作用,包括那些不應該改變的副作用。

真的,這些斷言應該用於非無效方法,也許更多的是爲了防止意想不到的副作用,而不是測試預期的副作用。 (國際海事組織,一個功能應該儘可能沒有副作用。)