在VS中加入单元测试框架:
右键项目“属性“来到“调试”
启动操作,选择“启动外部程序”选择NUnit程序
C:\Program Files\NUnit 2.5.9\bin\net-2.0\nunit.exe
这样就可以在生成的时候,自动启用NUnit进行调试
Not a Test Assembly
The assembly was not built with any known testing framework
出现上述这种错误,确认有没有加载using NUnit.Framework;
using NUnit.Framework;
namespace NUnitTest
{
[TestFixture]
public class Class1
{
[Test]
public void Add()
{
int a = 1;
int b = 2;
int sum = a + b;
Assert.AreEqual(sum, 3);
}
}
}
标识类的特性为TestFixture,以及方法的特性标识为Test这样就可以测试了,其中Assert是进行测验的一个类,里面有许多的静态方法。
当然不标识类的特性也可以测试,不标识方法的特性,调试的时候就不出现。
测试的效果图:
如果把上面重复的公用,怎么做呢,如下:
private int a;
private int b;
[SetUp]
public void InitializeOperands()
{
a = 1;
b = 2;
}
使用SetUp来标识即可。
如果想忽略这个方法
添加[Ignore]特性,这个方法还是会显示,只是会忽略测试,进度条是黄色的。
其他的一些方法
TestFixtureSetUp打开数据库连接,数据共享
TestFixtureTearDown关闭数据库连接, 数据共享
SetUp或TearDown
[Category("加法")]把一些方法分组。
异常的捕获
[ExpectedException(typeof(DivideByZeroException))]
public void DivideByZero()
{
int zero = 0;
int result = a / zero;
Assert.Fail("Exception");
}
如果存在异常就通过,所以上面这个通过测试。
如果修改为[ExpectedException(typeof(InvalidOperationException))]
那么就会报错,尝试除以0,这是不允许的。
好了,综合演示一下
namespace NUnitTest
{
[TestFixture]
public class Class1
{
[TestFixtureSetUp]
public void FixtureSetUp()
{
Console.Out.WriteLine("FixtureSetUp");
}
[TestFixtureTearDown]
public void FixtureTearDown()
{
Console.Out.WriteLine("FixtureTearDown");
}
[SetUp]
public void SetUp()
{
Console.Out.WriteLine("SetUp");
}
[TearDown]
public void TearDown()
{
Console.Out.WriteLine("TearDown");
}
[Test]
public void Test1()
{
Console.Out.WriteLine("Test 1");
}
[Test]
public void Test2()
{
Console.Out.WriteLine("Test 2");
}
}
}
运行结果:
FixtureSetUp
***** NUnitTest.Class1.Test1
SetUp
Test 1
TearDown
***** NUnitTest.Class1.Test2
SetUp
Test 2
TearDown
FixtureTearDown