[TestMethod]—用于把一个方法标记为一个测试方法。当你运行你的测试时,仅标记有这个属性的方法才能够运行。
[TestClass]—用于把一个类标记为一个测试类。当你运行你的测试时,仅标记有这个属性的类才能够运行。
当构建测试时,你总是使用[TestMethod]和[TestClass]属性。然而,还存在其它若干有用的(但是可选的)测试属性。例如,你可以使用下列属性对来建立和简化你的测试:
[AssemblyInitialize]和[AssemblyCleanup]—分别用于标记那些在一个程序集中的所有测试执行之前或之后要执行的方法
[ClassInitialize]和[ClassCleanup]—分别用于标记那些在一个类中的所有测试执行之前或之后要执行的方法
[TestInitialize]和[TestCleanup]—分别用于标记那些在一个特定的测试方法之前或之后要执行的方法
例如,你可能想创建一个虚构的HttpContext并使之应用于你所有的测试方法中。此时,你可以在一个标记有[ClassInitialize]属性的方法中建立该虚构的HttpContext,然后在一个标记有[ClassCleanup]属性的方法中释放此虚构的HttpContext。
此外,还存在若干属性你可以用于提供关于测试方法的额外信息。当你操作成百上千的单元测试时,你需要通过排序和过滤等方法来管理这些测试。此时,下面这些属性就变得相当有用:
[Owner]—指定一个测试方法的作者
[Description]—提供一个测试方法的描述
[Priority]—能够使你为一个测试指定一个整数优先权
[TestProperty]—指定一个随意的测试属性
你可以在测试视图窗口或测试列表编辑器中使用这些属性来排序和过滤测试。
最后,还存在一个属性可以支持你当运行一个测试时忽略一个特定的测试方法。当你的一个测试出现问题并且你目前还不想处理该问题时,这个属性就变得相当有用的:
?
[Ignore]—支持你临时性地禁用一个特定的测试。你可以把这个属性应用于一个测试方法或一个测试类之上。
Nunit一共有四个类断言类,分别是Assert、StringAssert、FileAssert和DirectoryAssert,它们都在NUnit.Framework命名空间,其中Assert是常用,也是我们最熟悉的,而另外三个断言类,顾名思义,分别对应于字符串的断言、文件的断言和目录的断言,理论上,仅Assert类就可以完成所有条件的判断,然而,如果合理的运用后面的三个断言,将使代码更加简洁、美观,也更加便于理解和维护。
Assert类:
1、AreEqual/AreNotEqual 相等不相等
2、AreSame/AreNotSame类判断
3、Contains判断一个对象是否存在于某对象(集合)
4、一系列条件判断:
IsTrue:判断条件为真
True:同上
IsFalse:判断条件为假
False:同上
IsNull:判断是否为空
Null:同上
IsNotNull:判断不为空间
NotNull:同上
IsNaN:判断数值是Nan
IsEmpty/IsNotEmpty:判断字符串是否为空/不为空
IsEmpty/IsNotEmpty:判断集合是否为空/不为空
5、比较大小
Greater:大于
GreaterOrEqual:大于等于
Less:小于
LessOrEqual:小于大于
6、IsInstanceOfType/ IsNotInstanceOfType是不是某一个类的实例
7、这几个比较有用,比如在调用被测试代码时,如果抛出异常,调用Fail()方法,则在失败的统计里,+1
Pass:强行让测试通过
Fail:强行让测试失败
Ignore:忽略该测试方法
Inconclusive:未验证该测试
CollectionAssert类
AllItemsAreInstancesOfType:集合中的各项是否是某某类型的实例
AllItemsAreNotNull:集合中的各项均不为空
AllItemsAreUnique:集合中的各项唯一
AreEqual:两个集合相等
AreEquivalent:两个集合相当
AreNotEqual:两个集合不相等
AreNotEquivalent:两个集合不相当
DoesNotContain:集合中不包含某对象
IsSubsetOf:一个集合是另外一个集合的子集
IsNotSubsetOf:一个集合不是另外一个集合的子集
IsEmpty:集合为空
IsNotEmpty:集合不为空
IsOrdered:集合的各项已经排序
特性:
[TestFixture]/[Explicit]:声明一个类是测试类/声明一个类只有在UI界面被选中时才执行
[TestFixtureSetup]/[TestFixtureTearDown]:在测试开始前/结束后要执行的操作,一个TestFixture只能有一个TestFixtureSetup或TestFixtureTearDown。
[Test]/[Ignore]:是测试方法/忽略掉,测试时不执行
[Setup]/[TearDown]:每个测试方法在执行前/结束后要执行的操作
方法名(([Values(1, 2, 3)] int x)
[Range]:生成某个数据范围内的子测试,如
TestPrintColsole([Range(0.2, 0.6, 0.2)] double d):生成0.2,0.4,0.6三个子测试用例
TestPrintColsole([Values(1, 2, 3, 4, 5, 6)] int x, [Range(0.2, 0.6, 0.2)] double d):两个Attribuee结合,共生成18个子测试用例
[Random]:在某个范围内随机生成测试用例,
TestPrintColsole([Random(-1.0, 1.0, 5)] double d):-1到1之间生成5个测试用例
TestPrintColsole([Values(1, 2, 3, 4, 5, 6)] int x, [Random(-1.0, 1.0, 5)] double d) :共生成30个子测试用例
[Repeat]: 重复执行多少次,用法如下
[Test, Repeat(100)]
[RequiresMTA]/ [RequiresSTA]/ [RequiresThread]:测试用例必须的在多线程、单线程、独立的线程状态下运行