一、NUnit的安装(Visual Studio)
通过VS菜单栏中的NuGet包管理器搜索并安装
1、若需要使用NUnit框架自带的runner运行,则在NuGet包管理器中搜索NUnit.Console安装,
安装后,在packages\NUnit.ConsoleRunner.3.X.X\tools中找到unit3-console并运行;
2、若想集成到VS上的测试平台,使用Microsoft的runner运行,则在NuGet包管理器中搜索NUnit3TestAdapter安装;
二、NUnit常见Attribute的使用
**[TestFixture] **
标识一个测试类
[Test]
标识一个无参的方法为测试用例
示例代码:
class MyPro
{
public static void Main()
{
MyProTest proTest = new MyProTest();
proTest.TestStringAdd();
}
public string StringAdd(string str1, string str2)
{
return str1 + str2;
}
}
[TestFixture]
public class MyProTest
{
[Test]
public void TestStringAdd()
{
try
{
MyPro proTest = new MyPro();
Assert.AreEqual("hello auston", proTest.StringAdd("hello,", "auston"));
Console.WriteLine("Test pass");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
[TestCase]
标识一个带参的方法为测试用例 ,可以设置测试数据及预期数据
示例代码:
[TestCase("hello ","world",ExpectedResult ="hello,world")]
public string TestStringAdd(string str1, string str2)
{
return str1 + str2;
}
[TestCase("hello ", "world", "hello world")]
public void TestStringAdd(string str1, string str2, string str3)
{
Assert.AreEqual(str3, str1 + str2);//断言
}
[TestCaseSource]
参数化测试中,设置测试数据的来源(实例化对象用nameof(),类用typeof())
示例代码:
[TestCaseSource(nameof(cases))]
public void TestStringAdd(string str1, string str2, string str3)
{
Assert.AreEqual(str3, str1 + str2);
}
static object[] cases = {
new object[]{"lo","ng","long"},
new object[]{"ti","me","time" },
new object[]{"no","see","nosee" }
};
[TestCaseSource(typeof(Cases))]
public void TestStringAdd(string str1, string str2, string str3)
{
Assert.AreEqual(str3, str1 + str2);
}
class Cases
{
public IEnumerator<object[]> GetEnumerator()
{
yield return new object[] { "lo", "ng", "long" };
yield return new object[] { "ti", "me", "time" };
yield return new object[] { "no", "see", "nosee" };
}
}
[TestFixtureSource]
参数化测试中,设置脚手架数据的来源(根据构造函数的参数数据),使用同上
[Setup]
运行测试用例前的统一设置,每次运行测试用例前都会执行一次
[TearDown]
运行测试用例后的统一设置,每次运行测试用例后都会执行一次
[TestFictureSetUp]与[TestFixtureTearDown]
用法同上,范围作用于整个测试类
[OneTimeSetUp]
运行测试用例前的统一设置,运行任意一个测试用例前会执行一次
[OneTimeTearDown]
运行测试用例后的统一设置,运行任意一个测试用例后会执行一次
[Ignore]
标识一个测试类或方法不应执行,NUnit3中需标明原因
示例代码:
[TestFixture]
[Ignore("不执行原因")]
class MyTest
{
}
[Category("分类名")]
给测试方法分组,测试时可运行某一组内的所有测试方法;
可与Test特性写在一起,逗号隔开,如:[Test,Category("testgroup001")];
有一个Explicit属性可显式排除该Category的运行,如:[Category("test001",Explicit=true)];
[ExpectedException(typeof(ExpectException))]或[Test,ExpectedException(typeof(ExpectException))]
该特性用于测试期望异常
三、NUnit的断言系统
NUnit提供约束模型(Constraint Model)和经典模型(Classic Model)两种断言系统
判断假设条件是否成立;
1、经典模型(Assert、StringAssert、CollectionAssert、FileAssert、DirectoryAssert)
每种断言都有一个单独的方法,本质是由约束模型实现;
注:已不添加新的功能。
2、约束模型(推荐)
约束模型只有Assert.That()一种方法,但有很多重载方法(参数是约束对象,根据不同的断言类型有不同的约束对象)
常用Assert方法有:
Assert.IsTrue 用来验证条件表达式是否为真
Assert.AreEqual 验证是否与期望值相等
Assert.AreSame验证是否引用了同一个对象
3、多个断言(使用Assert.Multiple方法)
若一个断言失败,测试不会终止,继续执行后面的断言,执行完后将结果统一返回。
版权归原作者 一介学徒 所有, 如有侵权,请联系我们删除。