仅使用断言语句进行单元测试是否有效?

时间:2010-08-16 22:33:25

标签: c# unit-testing tdd

所以,我是单元测试的新手,更重要的是测试第一次开发。在我的单元测试中只有一个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");
    }

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:6)

唯一的评论是使用Assert.AreEqual代替Assert.IsTrue

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

原因在于,如果测试失败,您获得的错误消息将更具描述性意义,以及实际发生的情况。显示“预期值< 50000>但实际上< 50-00-0>”的消息比“预期的价值是真实的,但却是错误的”要好得多。

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

答案 3 :(得分:2)

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