zoukankan      html  css  js  c++  java
  • nunit单元测试详解

    在粗略看了代码后,下面就详细说明相应的测试标记(属性)的用法。

    1. [TestFixture(arguments)]属性标记类为测试类,若没有填写参数,则测试类必须含有无参构造函数,否则需要相应的有参构造函数。也可以多个测试[TestFixture(1), TestFixture("a")]

    2. [Test]属性标记方法为测试方法,中添加Description参数可以给我们测试的功能添加描述信息。

    3. [TestCase(arguments)]属性标记有参数无返值方法为测试方法(泛型方法一样标记),想要多次测试可用逗号隔开([TestCase(1,2), TestCase(2,3)])。

    4. [TestCase(arguments,Result = value)属性标记带参数与返回值的方法为测试方法,执行的时候把预期的返回值也告诉NUnit,如果返回值不对,测试同样无法通过。

    5. [Suite](测试套件,仅对属性与索引器标记有效):可以将多个测试类组合到一起,同时执行多个测试。本版本的开发人员的一个信念就是减少这个的需要,可以使用[Category]来替代它。

    6. [Explicit]属性标记测试方法需要在UI界面显式执行,如果不想对某个方法进行单元测试,只是在它被选中时才进行测试的话,可以调用该特性。

    7. [Ignore]属性标记一个测试方法或一个测试类被忽略,如果测试类被忽略,其内中的测试方法也会被忽略。

    8. [ExpectedException(Type)]属性标记测试方法在运行时抛出一个期望的异常,如果是则测试通过,否则不通过。

    9. [Category("")]属性标记用于将测试分类(便于只测试需要的类别),可在方法与类上进行标记,在NUnit-GUI界面的Categories选项卡中对要测试种类进行添加,Run时仅测试该类别的测试。

    10. [TestFixtureSetUp]属性标记方法为类级别设置(初始化)方法,在整个测试类中执行一次初始化,所有的测试方法共享初始化数据。

    11. [TestFixtureTearDown]属性标记方法为类级别拆卸方法,在整个测试类中执行一次拆卸.当测试类中的所有测试方法执行完成,就会执行拆卸方法,用于清除数据、释放资源。

    12. [TearDown]属性标记方法为函数级别的拆卸方法,在执行完每个测试方法后,执行该拆卸方法。一个测试类可以仅有一个TearDown/Setup/TestFixtureSetUp/TestFixtureTearDown方法。如果有多个定义,测试类也会编译成功,但是测试时不会运行这些标记过的方法。

    13. [SetUp]属性标记方法为函数级别的设置方法,在执行每个测试方法前,执行该设置方法。

    14. 每执行一次Run,就是new一个新的实例在测试。

    15. [Maxtime]/[Timeout]属性标记测试用例的最大执行时间,前者超时时不取消测试,而后者会强行中断,用法如:[Test, Maxtime(2000)],[Test, Timeout(2000)]。

    16. [Repeat]属性标记测试方法重复执行多少次,如:[Test, Repeat(100)]。

    17. [RequiresMTA]/[RequiresSTA]/[RequiresThread]属性标记测试用例必须的在多线程、单线程、独立的线程状态下运行。

    18. [Values]属性标记测试用例的参数,以参数的形式传入一组值,NUnit会把这组值分解成相应数量的子测试。当测试用例的2个参数都使用[Values]进行标记,NUnit默认生成2组数量乘积的用例,需要使用[Sequential]标记测试用例才能按顺序生成一一对应的n(n=2组中最大数组长度)个子测试用例。

    19. [ValueSource]属性标记测试用例的参数,指定参数的数据源来自哪里,在使用[ValueSource]指定数据源时,该数据源必须实现了IEnumerable接口,数据源可以是属性、无参方法、实例或静态成员。
      更多属性标记与详细说明,可以查阅NUnit官网提供的说明文档。一个方法的测试可能要写很多个测试用例,这都是正常的,如果一个测试用例包含多个断言,那些紧跟失败断言的断言都不会执行,因为通常每个测试方法最好只有一个断言。

    TestFixture

    本属性标记一个类包含测试,当然setup和teardown方法可有可无.(关于setup 和teardown方法在后面介绍)
    做为一个测试的类,这个类还有一些限制

    • 必须是Public,否则NUnit看不到它的存在.
    • 它必须有一个缺省的构造函数,否则是NUnit不会构造它.
    • 构造函数应该没有任何副作用,因为NUnit在运行时经常会构造这个类多次,如果要是构造函数要什么副作用的话,那不是乱了.

    Test

    Test属性用来标记一个类(已经标记为TestFixture)的某个方法是可以测试的.为了和先前的版本向后兼容,头4个字符(“test”)忽略大小写.(参看http://nunit.org/test.html)

    Assert

    在NUnit中,用Assert(断言)进行比较,Assert是一个类,它包括以下方法:AreEqual,AreSame,Equals, Fail,Ignore,IsFalse,IsNotNull,具体请参看NUnit的文档。

    1)、测试二个参数是否相等

    Assert.AreEqual;

    Assert.AreEqual;

    2)、测试二个参数是否引用同一个对象

    Assert.AreSame;

    Assert.AreNotSame;

    3)、测试一个对象是否被一个数组或列表所包含

    Assert.Contains;

    4)、测试一个对象是否大于另一个对象

    Assert.Greater;

    5)、测试一个对象是否小于另一个对象

    Assert.Less;

    6)、类型断言:

    Assert.IsInstanceOfType;

    Assert.IsAssignableFrom;

    7)、条件测试:

    Assert.IsTrue;

    Assert.IsFalse;

    Assert.IsNull;

    Assert.IsNotNull;

    Assert.IsNaN;用来判断指定的值是否为数字。

    Assert.IsEmpty;

    Assert.IsNotEmpty;

    Assert.IsEmpty;

    Assert.IsNotEmpty;

    8)、其他断言:

    Assert.Fail;方法为你提供了创建一个失败测试的能力,这个失败是基于其他方法没有封装的测试。对于开发你自己的特定项目的断言,它也很有用。

    Assert.Pass;强行让测试通过

    字符串断言(StringAssert):提供了许多检验字符串值的有用的方法

    StringAssert.Contains;

    StringAssert.StartsWith;

    StringAssert.EndsWith;

    StringAssert.AreEqualIgnoringCase;

    CollectionAssert类

    CollectionAssert.AllItemsAreInstancesOfType;集合中的各项是否是某某类型的实例

    CollectionAssert.AllItemsAreNotNull:集合中的各项均不为空

    CollectionAssert.AllItemsAreUnique;集合中的各项唯一

    CollectionAssert.AreEqual;两个集合相等

    CollectionAssert.AreEquivalent;两个集合相当

    CollectionAssert.AreNotEqual;两个集合不相等

    CollectionAssert.AreNotEquivalent;两个集合不相当

    CollectionAssert.Contains;

    CollectionAssert.DoesNotContain;集合中不包含某对象

    CollectionAssert.IsSubsetOf:一个集合是另外一个集合的子集

    CollectionAssert.IsNotSubsetOf:一个集合不是另外一个集合的子集

    CollectionAssert.IsEmpty;集合为空

    CollectionAssert.IsNotEmpty;集合不为空

    CollectionAssert.IsOrdered;集合的各项已经排序

    FileAssert

    FileAssert.AreEqual;

    FileAssert.AreNotEqual;

    DirectoryAssert

    DirectoryAssert.AreEqual;

    DirectoryAssert.AreNotEqual;

    DirectoryAssert.IsEmpty;

    DirectoryAssert.IsNotEmpty;

    DirectoryAssert.IsWithin;

    DirectoryAssert.IsNotWithin;

    ExpectedException

    这里是一个验证这个假设的测试.有的时候,我们知道某些操作会有异常出现,例如, 在实例中增加除法,某个操作被0除,抛出的异常和.NET文档描述的一样.参看以下源代码.

  • 相关阅读:
    一个datagrid中嵌入checkBox典型的例子
    堆排序算法
    堆排序(利用最大堆)
    动态代理模式的实现
    [转载]C#如何实现对外部程序的动态调用
    9.Jmeter 多个threadgroup 中的配置元件会一次性进行初始化
    二十七。
    三十。接口2
    三十三。日志
    大道至简读后感
  • 原文地址:https://www.cnblogs.com/tangge/p/9781438.html
Copyright © 2011-2022 走看看