如何快速上手.net下单元测试工具NUnit?

 

NUnit基本使用

准备知识:

  读此博文需要了解单元测试基本概念及NUnit的的安装。

  传送门:单元测试之道(使用NUnit)

 

1.常见的错误

当学习一个新东西时,先学习错误,是最快的方式。

1.1 构造函数错误。

构造函数必须公开,无参,否则就会报错。
后面我们会讲到如何使用带参构造函数。
 

1.2 程序抛出异常错误。

在测试的方法中,使用异常抛出也会报错。
throw new ApplicationException("Intentional Exception");
 

1.3 Assert.Fail方法抛出错误。

示例:
 
[Test]

public void FailingTest()

{

// Assert.Fail方法可以抛出错误。

Assert.Fail("Intentional failture");

}

 

 

1.4 方法带参数的错误。

方法带参数一样会报错,这和构造的原理一致。
后面会讲到如何调用带参的函数。
示例:
// 无法带参执行

// 调用者为ut,参数没有提供

[Test]

public void NotRunnableTest(int a)

{

}

 

 
 

1.5 函数访问级别的错误。

不论函数还是类,访问级别都应该是public,否则会报错。
示例:
 
// 用于测试的方法必须是公开的

// 无法进行测试

// 可测试也会报错:method is not public 

[Test]

protected static void MockTest5()

{

 

}

 

 

1.6 不确定错误Inconclusive。

当不确定错误是否发生就可以使用,不确定错误。
不过并不推荐使用。
示例:
 
// Inconclusive 不确定的结果

[Test]

public void InconclusiveTest()

{

Assert.Inconclusive("No valid data");

}

 

 

2.基本的使用

2.1 添加描述信息

在特性中添加Description参数可以给我们测试的功能添加描述信息。
示例:
 
[Test(Description = "Mock Test #1")]

public void MockTest1()

{

 

}

 

 

2.2.1 构造函数带参数

为什么我们使用带参的构造函数会报错呢?
对于这个类来说,调用者不是我们,而是NUnit。所以我们调用带参的构造函数而又没有给他参数,当然报错了。
因此我们需要告诉NUnit参数。
示例:
 
// 构造带参数测试

// 多个测试用逗号隔开

[TestFixture(1),TestFixture(2)]

public class ParameterizedFixture

{

    public ParameterizedFixture(int num)

    {

 

    }

 

    [Test]

    public void Test1() { }

    [Test]

    public void Test2() { }

}

 

 

2.2.2 构造函数带泛型参数

如果想添加泛型的参数怎么办?
示例:
 
// 泛型构造函数也能带参测试

[TestFixture(1), TestFixture("a")]

    public class GenericFixture<T>

    {

        public GenericFixture(T obj)

    {

 

    }

    [Test]

    public void Test1() { }

    [Test]

    public void Test2() { }

}    

 

 

2.3.1 有参无返函数

如何调用有参无返函数呢?
示例:
 
// 带参函数的测试 

[TestCase(4), TestCase(0)]

public void Test3(int num)

{

}

 

想要多次测试可用逗号隔开。
 

2.3.2 有参有返函数

多了个返回值,怎么处理返回值呢?
示例:
 
// 带参带返回值的测试

// 必须指定返回值,执行结果和返回值相等,才算正确。 

[TestCase(1,1,Result = 3),TestCase(2,2,Result = 4)]

public int MethodWithParameters(int x, int y)

{

return (x + y);

}

 

执行的时候把预期的返回值也告诉NUnit,如果返回值不对。测试同样无法通过。

2.3.3 带泛型参数的函数

示例:
 
// 带参函数的测试

// 泛型内置工具不识别,可以用 gui测试

[TestCase(4, 4), TestCase("a", "b")]

public void GenericMethod<T>(T x, T y)

{

}

 

 

2.4 忽略测试。

如果不想测试一个类或函数怎么做呢?
示例:
 
[Test,Ignore]

public void Test1() { }

 

只需要添加Ignore特性,告诉NUnit忽略掉就可以了。
 

源码下载(含NUitNUnit-2.6.4 及相关文档):

 

posted @ 2015-09-30 17:09  AfreadHuang  阅读(1095)  评论(0编辑  收藏  举报