public class TestCalculator
{
private int result;
private Calculator calculator;
[SetUp] ////初始化,NUnit将在执行每个测试前执行标记SetUp属性标记的方法,有多少个测试用例(标记为Test的方法),就会执行多少次
public void init()
{
calculator = new Calculator();
Console.WriteLine("run init ...."); // 测试每个测试用例方法执行前都会执行SetUp标记的方法
}
[TestFixtureSetUp] //初始整个类,最先执行,如数据库连接的建立,只执行一次
public void InitTestClass()
{
Console.WriteLine("初始化整个测试类.... ");
}
[Test]
public void TestAdd()
{
this.result = calculator.Add(10, 2);
Console.WriteLine("Just test Console.out ...."); // 在NUnit底部的Console.out标签里会输出这行文字
Assert.AreEqual(12, this.result);
}
[Test]
public void TestSub()
{
this.result = calculator.Sub(10,2);
Assert.AreEqual(8, this.result);
}
[Test]
[Ignore] //Ignore忽略属性.你可以保持测试,但又不运行它们.如果Ignore属性附加到TestFixture,所有在fixture的测试都被 忽略
public void TestSub2()
{
this.result = calculator.Sub(10, 3);
Assert.AreEqual(7, this.result);
}
[Test]
[Explicit] //与Ignore相似,但与Ignore又不同,标记为Ignore的测试用例,怎么着都不会执行,而Explicit用例可以指定让其执行或不执行
public void TestSub3()
{
this.result = calculator.Sub(10, 3);
Assert.AreEqual(7, this.result);
}
[Test]
[Category("Mul")]
public void TestMul()
{
this.result = calculator.Mul(10, 2);
Assert.AreEqual(20, this.result);
}
[Test]
[Category("Div")] //把这个测试用例分类为Div
public void TestDiv()
{
this.result = calculator.Div(10, 2);
Assert.AreEqual(5, this.result);
}
[Test]
[ExpectedException] //ExpectedException 在执行过程中捕获你期望的异常类型
[Category("Div")] //把这个测试用例分类为Div
public void TestDiv2()
{
this.result = calculator.Div(10, 0);
Assert.AreEqual(5, this.result);
}
[TearDown] // 销毁或回收资源,如流的读取,数据库连接等。每个测试方法执行完毕后都会调用该方法,有多少个测试用例(标记为Test的方法),就会执行多少次
public void CollectGarbage()
{
Console.WriteLine("回收资源 .....");
}
[TestFixtureTearDown] // 回收整个测试类的资源,如断开数据库的连接,只执行一次
public void CollectTestClassGarbage()
{
Console.WriteLine("回收测试类的资源.....");
}
}