C# 只有assert语句的单元测试有效吗?

C# 只有assert语句的单元测试有效吗?,c#,unit-testing,tdd,C#,Unit Testing,Tdd,所以,我不熟悉单元测试,更不熟悉测试第一次开发。在我的单元测试中只有一个assert.isTrue语句,在这里我传递了我的方法和一个有效的参数,并将它与已知的正确答案进行比较,这对我有效吗 方法 public static string RemoveDash(string myNumber) { string cleanNumber = myNumber.Replace("-",""); return cleanNumber; } 测试 [Tes

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

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


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

这似乎完全有效-但是,为什么不在该方法中包括一些其他测试,按照同样的思路,但测试人员有时会阅读我们的测试,因此我尝试使它们尽可能可读。我更愿意使用以下内容,而不是单一断言:

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

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

Assert.IsAreEqual("50000", RemoveDash("50-00-0"));
其原因是,如果测试失败,您得到的错误消息更能说明应该发生什么以及实际发生了什么。显示“预期值但实际上是”的消息比“预期值为真,但为假”要好得多


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

谢谢fletcher。我可以看出这是如何使它更容易阅读的。+1我不会对这么短的内容使用局部变量,但AssertEquals()或等效项通常很有用,因为它(通常)会在测试失败时打印两个值,因此更容易找出问题所在。感谢您的输入。这是一个很容易实现的更改,并且记住将来要做。在这种情况下,选择Assert.Equals的另一个原因是,当它失败时,您将得到有用的反馈,而不必考虑太多的调试工作。(即,类似于“预期为‘50000’但为‘5000-0’”,而不是“预期为真但为假”)。干杯