现在的位置: 首页 > 综合 > 正文

NUnit单元测试使用实例

2013年10月07日 ⁄ 综合 ⁄ 共 3496字 ⁄ 字号 评论关闭

1.新建.NET项目-->类库

2.添加引用  nunit.framework.dll

3.编写测试用例(Test Case)

 

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

namespace NUnitTest
{
    
//作者: 王文平
    
//日期: 2007-09-20
    
//描述: NUnit单元测试Demo
    /*
     * TDD的简介
     * 使用下面2个原则来定义TDD
     * 除非你有一个失败的自动测试,永远不要写一单行代码. 
     * 阻止重复
     * 第一个原则是显而易见的.在没有失败的自动测试下就不要写代码
     * 第二个原则说明了在一个程序中,不应该包含重复的代码.如果代码重复
     * /

    /*
     * TestFixture 属性
     *本属性标记一个类包含测试,当然setup和teardown方法可有可无.
     *做为一个测试的类,这个类还有一些限制 
     *必须是Public,否则NUnit看不到它的存在. 
     *它必须有一个缺省的构造函数,否则是NUnit不会构造它. 
     */

    [TestFixture]
    public class NUnitExample
    {
        
private int a;
        
private int b;
        
//SetUp 属性
        
//初始化
        [SetUp]
        
public void InitializeOperands()
        {
            a 
= 1;
            b 
= 2;
        }

        //Test属性用来标记一个类(已经标记为TestFixture)的某个方法是可以测试的.
        [Test]
        [Category(
"Numbers")]
        
public void AddTwoNumbers()
        {
            
int sum = a + b;
            Assert.AreEqual(sum, 
3);
        }
        [Test]
        [Category(
"Numbers")]
        
public void MultiplyTwoNumbers()
        {
            
int product = a * b;
            Assert.AreEqual(
2, product);
        }

        //TearDown 属性
        
//清除

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

        [Test]
        [Category("Exception")]
        [ExpectedException(
typeof(System.DivideByZeroException))]
        
public void DivideByZero()
        {
            
int zero = 0;
            
int infinity = a / zero;
            Assert.Fail(
"Should have gotten an exception");
        }

        //Ignore 属性
        
//保持测试,但又不运行
        [Test]
        [Category(
"Numbers")]
        [Ignore(
"Multiplication is ignored")]
        
public void MultiplyTwoNumbers2()
        {
            
int product = a * b;
            Assert.AreEqual(
3, product);
        }

        //TestFixtureSetUp/TestFixtureTearDown 属性
        
//正如他们名字表明的一样,这些属性用来标记为整个test fixture初始化/释放资源方法一次的方法. 
        
//为所有test fixture的测试共享相同的数据库连接对象,我们可以写一个打开数据库连接的方法,标记为TestFixtureSetUp属性
        
//编写另外一个关闭数据库连接的方法,标记为TestFixtureTearDown属性

        //Category 属性
        
//对于测试来说,你有的时候需要将之分类,此属性正好就是用来解决这个问题的。 
        
//你可以选择你需要运行的测试类目录,也可以选择除了这些目录之外的测试都可以运行。
        
//在命令行环境里 /include 和/exclude来实现。在GUI环境下,就更简单了,选择左边工作域里的Catagories Tab,选择Add和Remove既可以了。

        //Explicit属性 
        
//本属性忽略一个test和test fixture,直到它们显式的选择执行。如果test和test fixture在执行的过程中被发现,就忽略他们。
        
//所以,这样一来进度条显示为黄色,因为有test或test fixture忽略了。
        
//原因是Ingore属性忽略了某个test或test fixture,那么他们你再想调用执行是不可能的。那么万一有一天我想调用被忽略的test或test fixture怎么办,就用Explicit属性了。我想这就是其中的原因吧。
        [Test, Explicit]
        [Category(
"Exception")]
        [ExpectedException(
typeof(DivideByZeroException))]
        
public void DivideByZero2()
        {
            
int zero = 0;
            
int infinity = a / zero;
            Assert.Fail(
"Should have gotten an exception");
        }

        //Expected Exception属性 
        
//期望在运行时抛出一个期望的异常,如果是,则测试通过,否则不通过。
        
//在本测试中,应该抛出DivideByZeroException,但是期望的是InvalidOperationException,所以不能通过。
        
//如果我们将[ExpectedException(typeof(InvalidOperationException))]改为[ExpectedException(typeof(DivideByZeroException))],本测试通过。
        [Test]
        [Category(
"Exception")]
        [ExpectedException(
typeof(DivideByZeroException))]
        
public void ExpectAnException()
        {
            
int zero = 0;
            
int infinity = a / zero;
            Assert.Fail(
"Should have gotten an exception");
        }

    }   
}

抱歉!评论已关闭.