【发布时间】:2010-07-23 09:20:28
【问题描述】:
目前我正在处理一些测试用例,并且我经常发现在每种情况下我都会得到多个断言。例如(为简洁起见,过度简化和删除了 cmets):
[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 属性是否被成功读取不感兴趣,这些在另一种情况下进行测试。但是,如果前两个失败,我怎么能测试最后一个断言而不先断言其他两个断言呢?
【问题讨论】:
标签: c# unit-testing nunit