簡體   English   中英

如何用Moq測試void方法?

[英]How to test a void method with Moq?

我是TDD的新手,我還有很多問題,其中一個問題是如何測試void方法!

我有一個通過引用傳遞的參數,並且我不知道如何測試:(這只是測試,不是我的真實方法)

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 ,我將進行以下測試:

  1. userDAO調用了斷言GetSomething()
  2. 聲明返回的參考字符串cod ==傳入了我們用來創建userDAO
  3. 斷言返回的參考字符串name ==傳入了我們用來創建userDAO

我同意避免使用ref參數,但我建議按照@Tim Cools的其他答案中的建議進行重構

您應該嘗試避免使用ref和out參數。 使用包含兩個屬性的對象。 這將使您的設計更加整潔,工作更加整潔...

編輯:如果您確實想使用out參數,可以在此處找到示例

調用方法后,只需測試params中的值,即可模擬userDAO以控制其返回值(空,鱈魚,名稱)

無效方法意味着會有某種副作用。 我通常建議盡量避免使用它們,但是當您需要測試一個時,一般的經驗法則是:

  1. 確認對您的模擬進行了所有預期的呼叫。
  2. 如果可能,斷言使用特定的參數值調用了模擬。 這對於void方法更為重要,因為您正在測試副作用。
  3. 聲明所有可能的副作用,包括那些不應該改變的副作用。

實際上,這些斷言也應該針對非無效方法進行,也許更多的是要防止意外的副作用,而不是測試預期的副作用。 (IMO,如果有可能,函數應具有零副作用。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM