簡體   English   中英

TDD nUnit用於一種方法的多個斷言

[英]TDD nUnit multiple asserts for one method

在我今天的生活中第一次使用TDD。 我正在使用nUnit。

我有一個方法,我可以插入多個不同的輸入,並檢查結果是否有效。

我讀到一次測試中的多個斷言不是問題,我真的不想為每個輸入編寫新的測試。

多個斷言的示例:

    [TestFixture]
public class TestClass
{

    public Program test;

    [SetUp]
    public void Init()
    {
        test = new Program();

    }
    [Test]
    public void Parse_SimpleValues_Calculated()
    {
        Assert.AreEqual(25, test.ParseCalculationString("5*5"));
        Assert.AreEqual(125, test.ParseCalculationString("5*5*5"));
        Assert.AreEqual(10, test.ParseCalculationString("5+5"));
        Assert.AreEqual(15, test.ParseCalculationString("5+5+5"));
        Assert.AreEqual(50, test.ParseCalculationString("5*5+5*5"));
        Assert.AreEqual(3, test.ParseCalculationString("5-1*2"));
        Assert.AreEqual(7, test.ParseCalculationString("7+1-1"));
    }
}

但是當一些東西失敗時,很難讀出哪個斷言失敗了,我的意思是如果你有很多斷言,你必須通過所有斷言找到正確的斷言。

是否有任何優雅的方式來顯示我們在斷言失敗時設置了什么輸入,而不是結果和預期結果?

謝謝。

我的意思是,如果你有很多,所以你必須經歷所有。

不,你不 - 你只看堆棧跟蹤。 如果您在IDE中運行測試,我發現這很容易就可以確定哪條線路出現故障。

這就是說, 一個(顯著)更好的方式-與參數測試TestCaseAttribute 例如:

[Test]
[TestCase("5*5", 25)]
[TestCase("5*5*5", 125)]
[TestCase("5+5", 10)]
// etc
public void Parse_SimpleValues_Calculated(string input, int expectedOutput)
{
    Assert.AreEqual(expectedOutput, test.ParseCalculationString(input));
}

現在,您的單元測試運行器將分別向您顯示每個測試用例,您將能夠看到哪個失敗。 此外,它將運行所有測試,即使早期測試失敗 - 因此您不會最終修復一個測試,只是發現下一個測試意外失敗。

對於要分別指定輸入集合的情況,還有TestCaseSourceAttribute ,例如,用於多個測試。

暫無
暫無

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

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