NUnit单元测试使用实例

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 " );
        }

    }   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值