簡體   English   中英

如何在C#中對KnockoutUtility進行單元測試?

[英]How to unit test KnockoutUtility in C#?

我有一個使用以下方法獲取刪除消息的類:

public IEnumerable<Message> GetKnockoutMessages(Data data)
    {
        if(data.Messages != null)
        {
            return data.Messages.Where(m => m.UnderWritingRuleId != null);
        }
        else
        {
            return new List<Message>();
        }
    }

到目前為止,我有一個單元測試,僅部分覆蓋了下面的單元測試。

[TestMethod]
    public void TestGetKnockoutMessages()
    {
        KnockoutUtility knockUtility = new KnockoutUtility();
        IEnumerable<Message> messages = knockUtility.GetKnockoutMessages(MockData.Object);
        Assert.IsNotNull(messages);
    }

這將覆蓋return data.Messages.Where(m => m.UnderWritingRuleId != null);所有內容return data.Messages.Where(m => m.UnderWritingRuleId != null);

我想知道如何對該方法進行單元測試以獲得100%的覆蓋率。

任何幫助,將不勝感激。 謝謝

該單元測試無法涵蓋所有​​內容,因為您沒有驗證所有案例。 您必須測試兩種邏輯:

  • if/else邏輯
  • Where(m => m.UnderWritingRuleId != null)邏輯

基於此假設,您必須創建證明以下情況的案例:

  • 如果data.Messagesnull則必須驗證該方法是否返回List<Message>()新實例,因為您是在這樣的代碼中指定的。
  • 接下來的情況是,如果data.Messages為空(這意味着此條件data.Messages.Count() == 0 ),則驗證方法是否返回IEnumerable<Message>
  • 下一種情況是驗證方法是否返回滿足您條件的確切消息: Where(m => m.UnderWritingRuleId != null) 換句話說,僅填充UnderWritingRuleId消息。

為了實現我提到的內容,您必須創建滿足這種情況的Data對象。 我不知道什么是MockData.Object但我希望您在其中包括您的安排。

每個案例應采用單獨的測試方法,如下所示:

[TestMethod]
public void TestGetKnockoutMessages_Case1()
{
     // Arrange

     // Action

     // Assert
}

[TestMethod]
public void TestGetKnockoutMessages_Case2()
{
     // Arrange

     // Action

     // Assert
}

[TestMethod]
public void TestGetKnockoutMessages_Case3()
{
     // Arrange

     // Action

     // Assert
}

安排是您配置模型的地方。 行動是你執行要測試和斷言是地方,你做的斷言方法的地方。

暫無
暫無

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

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