2.6 [Test]属性
这个属性是有用处的,因为它表明这是一个测试方法。
[TestFixture]
public class TestSimpleCalculator
{
SimpleCalculator myMath;
private double a; // a = 3.0
private double b; // b = 5.0
// 这是一个测试方法
[Test]
public void Add()
{
Assert.AreEqual( a, 3.0 ); // 返回真
Assert.AreEqual( b, 5.0 );// 返回真
a = myMath.Add( a, b );
Assert.AreEqual(a, 7.0, "The expect result is 7, and the actual result is 8");// 返回假,并且会打印出错误信息
}
}
2.7 [ExpectedException(typeof(OneSupportedException))] 属性
这个属性其实非常有用处,它表明这个函数会抛出一个预期的异常。在一个项目中,异常的处理是不可避免的。如果异常处理机制不好的话,会给程序带来相当大的混乱。也许你的程序充满了try,catch,但是确总也捕捉不到自己想要的异常。混乱的异常对于程序员来说是灾难。
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void ExpectAnException()
{
throw new InvalidCastException();// 这个地方抛出了非预期的异常,所以测试方法失败。
}
2.8 [Ignore("name")]属性
这个属性也挺有用处,它表示这个测试方法会被忽略掉。也许你的代码进行了一些升级,以前的测试方法已经不再重要,但是你仍然希望保留它们。那么你尽可以把它们标志成Ignore,然后统一放到一个文件或者Region中,以做存档之用。
[Test]
[Ignore("ignored test")]
[ExpectedException(typeof(InvalidOperationException))]
public void IgnoredTest()
{
throw new Exception(); // 如果可以运行这个测试方法,那么这个方法不会通过测试,但是现在它已经被忽略掉了。
}
2.9 [Platform("SupportedPlatform")]属性
这个属性也相当实用,它表明这个测试方法会运行在指定的平台上。大家都知道,.Net Framework有几个版本,还有各种版本的Windows系统。不同的版本对于某些类库或者API的支持是不一样的。比如WMI查询语句的某些用法在Win2000上无法通过测试。某些类库在.net1.1中无法找到,如果指定了平台,一切都变得井井有条了。
[Test]
[Platform("NET-1.1")]
//更多支持的平台请查阅NUnit的文档
public void DotNetOneOneTests()
{
Assert.AreEqual( "This case run on .Net1.1", "This method will not be executed" ); // 这个测试方法只会运行在.Net1.1的平台下。
}