我目前正在处理一些测试用例,而且我经常发现在每个用例中都有多个断言。例如(为了简洁起见,已经过度简化并删除了注释):
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance = new MyClass("Test name");
Assert.AreEqual("Test Name", myInstance.Name);
}
原则上看起来还不错,但测试的目的是验证当使用给定名称实例化类时,Name属性是否设置正确,但如果在实例化之前出现任何问题,它将失败,甚至在进行断言之前就失败了。
我将其重构为:
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance;
string namePropertyValue;
Assert.DoesNotThrow(() => myInstance = new MyClass("Test name"));
Assert.DoesNotThrow(() => namePropertyValue = myInstance.Name);
Assert.AreEqual("Test Name", namePropertyValue);
}
当然,现在我正在测试三件事情; 在这个测试中,我不感兴趣的是测试MyClass实例是否成功实例化,或者Name属性是否被成功读取,这些在另一个案例中测试。但是如果前两个失败,如何测试最后一个断言而不先断言其他两个呢?