NUnit属性

Posted Byrd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NUnit属性相关的知识,希望对你有一定的参考价值。

TestFixture:它标记一个类包含测试,申明该类是用来测试的。一般用在class的定义之前;

        Test一般是放在method之前,表示对该方法的测试;如前一篇文章所示的class。

        SetUp/TearDown属性:这两个属性一般是用来对资源的初始化/清除的,每个测试的method之前/之后都会调用这两个属性所测试的函数。一般用来处理共享数据的初始化/清除。

        TestFixtureSetUp/TestFixtureTearDown 也是用来对资源的初始化/清除的,但是它是用来标记test fixture初始化/清除一次时使用的,即整个测试过程中,只调用一次,一般用来标记连接数据库的方法。

        Ignore属性:不用说大家也都能猜到是什么意思吧。当一个method还没有完成时,我们可以在它的测试函数前面加上该属性,当然也还要加上 [Test]标签,那么在测试的时候,NUnit就会忽略对该函数的测试啦。等到该method完成之后,再去掉该[Ignore]标签,让它不再被忽 略。

         ExpectedException:有的函数会抛出某些异常,我们就可以写测试函数来判断该异常结果是否是预料之中的,如判断某个对象是否为空:

 1.AreEqual()和AreNotEqual()方法,用来查看两个对象的值是否相等或不等,与对象比较中使用的Equals()方法类似。
  2.AreSame()和AreNotSame()方法,用来比较两个对象的引用是否相等或不等,类似于通过“Is”或“==”比较两个对象。
  3.Contains()方法,用来查看对象是否在集合中,集合类型应与System.Collections.IList兼容。示例:
    Dim o As New Object
    Dim al As New ArrayList
    al.Add(o)
    Assert.Contains(o, al)
  4.Greater()和Less()方法,用来比较两个数值的大小,前者相当于大于号(>),后者相当于小于号(<)。
  5.IsInstanceOfType()和IsNotInstanceOfType()方法,用来判断对象是否兼容于指定类型。示例:
    Dim t As Type = New Object().GetType
    Dim s As String = ""
    Assert.IsInstanceOfType(t, s)
由于Object是.net中所有类型的基类,String类型兼容于Object,因此这个示例是能够运行通过的。而下边这个示例运行将是失败的:
    Dim t As Type = New ArrayList().GetType
    Dim s As String = ""
    Assert.IsInstanceOfType(t, s)
  6.IsAssignableFrom()和IsNotAssignableFrom()方法,用来判断对象是否是指定类型的实例。示例:
    Dim t As Type = New Object().GetType
    Dim s As String = ""
    Assert.IsAssignableFrom(t, s)
这个示例与之前的示例是一样的,但由于字符串s不是Object类型的,因此无法运行通过。而下边这个实例可以运行通过:
    Dim t As Type = New String("").GetType
    Dim s As String = ""
    Assert.IsAssignableFrom(t, s)
  7.IsFalse()和IsTrue()方法,用来查看变量是是否为false或true,如果IsFalse()查看的变量的值是false则测试成功,如果是true则失败,IsTrue()与之相反。
  8.IsNull()和IsNotNull()方法,用来查看对象是否为空和不为空。
  9.IsEmpty()和IsNotEmpty()方法,用来判断字符串或集合是否为空串或没有元素,其中集合类型应与ICollection兼容。
  10.IsNaN()方法,用来判断指定的值是否不是数字。
  11.Fail()方法,意为失败,用来抛出错误。我个人认为有两个用途:首先是在测试驱动开发中,由于测试用例都是在被测试的类之前编写,而写成时又不清楚其正确与否,此时就可以使用Fail方法抛出错误进行模拟;其次是抛出意外的错误,比如要测试的内容是从数据库中读取的数据是否正确,而导致错误的原因却是数据库连接失败。
  12.Ignore()方法,意为忽略,用来忽略后续代码的执行,用途可以参考Fail()方法。
此外,NUnit还提供了一个专用于字符串的静态类NUnit.Framework. StringAssert,该类主要包含4个方法:
  1.Contains()方法,用来查看指定的第二个字符串中是否包含了第一个字符串。
  2.StartsWith ()和EndsWith ()方法,分别用来查看指定的第一个字符串是否位于第二个字符串的开头和结尾。
  3.AreEqualIgnoringCase()方法,用来比较两个字符串是否相等。

最后是在netTest类库里面的一个小小的测试的方法,可以试试。

using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;

namespace NUNIT
{
 

   [TestFixture]//声明该类是用来进行测试的
    public class netTest
    {
        [Test]//表示该方法需要进行测试的
        public void TestA()
        {
            int d, i;
            for (i = 0; i < 10; i++)
            {
                d = i;
            }
            Assert.AreEqual(10, i);//判断预期值是否是10
        }
        [Test]
        public void TestB()
        {
            int d, i;
            for (i = 0; i < 10; i++)
            {
                d = i;
            }
            Assert.AreEqual(11, i);//判断预期值是否是11
        }
    }
}

以上是关于NUnit属性的主要内容,如果未能解决你的问题,请参考以下文章

xUnit中等效的NUnit SetUpFixture属性?

如何教 SpecFlow 向我的测试类添加额外的 NUnit 属性

NUnit属性

Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试

单元测试之NUnit二

如何断言两个列表包含 NUnit 中具有相同公共属性的元素?