【问题标题】:Is it valid to have unit tests with only an assert statement?仅使用断言语句进行单元测试是否有效?
【发布时间】:2010-08-16 22:33:25
【问题描述】:

所以,我是单元测试的新手,对于第一次开发测试更是如此。在我的单元测试中只有一个 assert.isTrue 语句,我在其中传递我的方法和一个有效参数,并将其与已知的好答案进行比较,对我来说是否有效?

方法

public static string RemoveDash(string myNumber)
    {
        string cleanNumber = myNumber.Replace("-","");
        return cleanNumber;
    }

测试

[TestMethod()]
    public void TestRemoveDash()
    {
        Assert.IsTrue(RemoveDash("50-00-0")=="50000");
    }

【问题讨论】:

    标签: c# unit-testing tdd


    【解决方案1】:

    如果它测试你的方法的功能,那是非常有效的,它似乎正在做。

    可能会考虑在此处使用 Equals,但这并不重要。另外,我知道这是一个测试示例,但始终确保测试输入不是预期的情况以及它可以进入的任何其他有效形式(这可以是相同的测试方法或不同的测试方法,具体取决于根据您的喜好)

    【讨论】:

    • 在这种情况下更喜欢 Assert.Equals 的另一个原因是,当它失败时您将获得有用的反馈,而不必考虑太多进行调试。 (即,类似“预期为'50000'但为'5000-0'”而不是“预期为真但为假”)。干杯
    【解决方案2】:

    测试人员有时会阅读我们的测试,因此我尝试让它们尽可能易读。我更喜欢使用以下内容,而不是单个 Assert:

    [TestMethod()]
    public void TestRemoveDash()
    {
        string expected = "50000";
        string actual = RemoveDash("50-00-0");
        Assert.AreEqual(expected,actual);
    }
    

    【讨论】:

    • 谢谢弗莱彻。我可以看到这如何使它更易于阅读。
    • +1 我不会使用局部变量来做这么短的事情,但是 AssertEquals() 或等效的通常是有帮助的,因为它(通常)会在测试失败时打印两个值,所以更容易找出问题所在。
    【解决方案3】:

    唯一的注释是使用Assert.AreEqual而不是Assert.IsTrue

    Assert.IsAreEqual("50000", RemoveDash("50-00-0"));
    

    这样做的原因是,如果测试失败,您收到的错误消息更能描述预期发生的情况和实际发生的情况。一条消息说“预期值为 但实际上是 ”比“预期值为真,但为假”要好得多。

    根据经验,每当您发现自己想使用Assert.IsTrue 时,请查看Assert 方法,看看是否有更好的方法来测试您的期望(例如Assert.IsInstanceOfTypeAssert.IsNotNull 等) .

    【讨论】:

      【解决方案4】:

      这似乎完全有效 - 但是,为什么不在该方法中包含一些其他测试,沿着相同的路线但测试例如RemoveDash("-") == ""RemoveDash("-5") == "5" 等?

      【讨论】:

      • 感谢您的意见。这是一个易于实施的更改,并记住在未来做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多