zoukankan      html  css  js  c++  java
  • [C#]在C#中使用NUnit进行单元测试

    纵观软件的开发,测试已经日益成为软件开发过程中的重要环节,通常一个软件的开发周期中测试要占到一半时间甚至更多。而在测试过程中,单元测试更是万里长征第一步,单元测试进行得是否完善,直接影响到后期集成测试的效率。进行单元测试,有许多软件可以自动完成,NUnit就是其中之一。这是一款与JUnit齐名的,同属于xUnit家族的单元测试软件(在http://www.NUnit.org我们可以免费得到这款软件)。

    [正文]            

        让我们从一个简单的例子开始。假设我们正在编写一个航班管理应用程序,假设有这么一个方法——TransLinkFlightNo()。具体看注释:

    待测试方法:(ComFunction.cs)

    using System;
    using System.Collections;
    using System.Text;
    using System.Data;
    /// <summary>
            
    /// 将完整的航班联线航班号转化为简化的航班联线航班号
            
    /// LeeWenjie -- 2005-08-16
            
    /// </summary>
            
    /// <param name="P_str">完整航班联线航班号</param>
            
    /// <returns>简化航班联线航班号</returns>

            public static string TransLinkFlightNo( string P_str )
            
    {
                
    if ( P_str.Length <= 0 )    
                    
    return "";
                
                
    string[] strSch = P_str.Split('/');
                StringBuilder RtnSchLine 
    = new StringBuilder(25);    //返回航班联线    --LeeWenjie
                            
                
    if ( strSch.Length >= 1 )
                    RtnSchLine.Append( strSch[
    0] );
                    

                
    for ( int i=1; i < strSch.Length ; i++ )
                
    {
                    
    if ( strSch[i].Length > 0)
                    
    {                
                        
    if ( String.Compare( strSch[i-1],0,strSch[i],0,4,true== 0 )
                        
    {
                            
    // 判断相邻的两个航班号是否相等 -- LeeWenjie 2005-08-15
                            
    // 不相等时添加,否则不添加
                            if ( strSch[i].Length <=6 && String.Compare( strSch[i-1],0,strSch[i],0,6,true!= 0)
                            
    {
                                RtnSchLine.Append(
    "/");
                                RtnSchLine.Append(strSch[i].Substring(
    4));    
                            }

                            
    else
                            
    {
                                
    for (int j = 4;j<strSch[i].Length;j++)
                                
    {
                                    
    if ( String.Compare( strSch[i-1],j,strSch[i],j,1,true!= 0)
                                    
    {
                                        RtnSchLine.Append(
    "/");
                                        RtnSchLine.Append(strSch[i].Substring(j));
                                        
    break;
                                    }

                                }

                            }

                        }

                        
    else
                        
    {
                            RtnSchLine.Append(
    "/");
                            RtnSchLine.Append(strSch[i].Substring(
    2));
                        }

                    }

                }

                
    return RtnSchLine.ToString() ;
            }


     

    测试类:(Test.cs)

    using System;
    using System.IO;
    using System.Configuration;

    using NUnit.Framework;
    /// <summary>
        
    /// ComFunctionsTesting 测试 ComFunctions 类方法
        
    /// LeeWenjie 2005-08-16
        
    /// </summary>

        [TestFixture]
        
    public class ComFunctionsTesting
        
    {
            [Test]
            
    public void TransSchLineTest()
            
    {
                
    string strFileName = @"..\..\ComFunctionsTesting.txt";
                
                
    if ( !File.Exists( strFileName ) )
                
    {
                    
    throw new Exception("请设置测试文件,谢谢!" );
                }


                StreamReader  sr 
    = new StreamReader(strFileName);
                
    string NextLine = "";

                
    while ( (NextLine = sr.ReadLine() ) != null )
                
    {
                    
    if ( NextLine.Substring(0,1!= "#" )
                    
    {
                        
    string[] strArgs = NextLine.Split(',');

                        Assert.AreEqual(strArgs[
    0],ComFunction.TransLinkFlightNo( strArgs[1] ));
                    
                    }


                }

                sr.Close();
            }

        }

    测试用例:(ComFunctionsTesting.txt)
    (#:注释语句;测试用例以","分隔,左边为结果期望值,右边为测试输入值)
    (当然,也可以将该文档写成XML文档,可以输入列多的测试信息)

    ----------------------------------------------------------------
    # 文件名称:ComFunctionsTesting.txt
    # 功能描述:ComFunctions类 TranSchLine 方法的测试用例
    #            
    -- # 为注释行
    #            
    --文档不能有空行        --LeeWenjie 2006-03-23
    # Create :LeeWenjie 
    2005-08-16
    ---------------------------------------------------------------
    #
    # 返回值,输入值
    #
    MF1001
    /11,MF1001/MF1011
    MF831
    /2,MF831/MF832
    MF8115
    /8225/26/8116,MF8115/MF8225/MF8226/MF8116
    MF1087
    /88,MF1087/Mf1088
    Mf1087,Mf1087
    MF8577
    /88,MF8577/MF8577/MF8588/MF8588
    MF8577
    /66/88,MF8577/MF8577/MF8566/MF8588/MF8588
    MF8577
    /66/88,MF8577/MF8577/MF8566/MF8588/MF8588/
    # 新七位航班号    
    --LeeWenjie
    MF8304A
    /B,MF8304A/MF8304B
    MF8304A
    /5B,MF8304A/MF8305B
    MF8304A
    /B/C,MF8304A/MF8304B/MF8304C
    MF8304A
    /5B/6C,MF8304A/MF8305B/MF8306C
    MF8304A
    /5A/6A,MF8304A/MF8305A/MF8306A
    MF831
    /01A,MF831/MF8301A
    # END


        首先要注意的是这个类关联了一个[TestFixture]特性(attribute)——这表示这个类包含了测试代码(这个特性可以被继承)。这个类必须是公有的,但他的父类并不受限制。这个类还必须有一个默认构造函数。

        编译并运行这个例子。假设你已经将你的测试代码编译为ComFuntion.dll。打开NUint Gui(安装程序会在你的桌面和“程序”菜单中建立一个快捷方式),打开GUI后,选择File->Open菜单项,找到你的ComFuntion.dll并在“Open”对话框中选中它。ComFuntion.dll装载后你会在左边的面板中看到一个测试树结构,还有右边的一组状态面板。

    单击Run按钮,状态条和测试树种的TransLinkFlightNo节点变成了红色——我们的测试失败了。

    “Errors and Failures”面板显示错误消息,

    在它正下方的堆栈跟踪面板报告了测试失败的语句在代码中的位置.

    如果测试结果和期望的一样时,节点变绿.
    --------------------------------------------------------------------------------------------------

    --LeeWenjie 2006-09-11

    01Soft.cn@Gmail.com

  • 相关阅读:
    Windows Subversion与TortoiseSVN安装与使用
    IE6/IE7中JavaScript json最后一个键值后不能增加逗号
    PHP json_encode/json_decode与serialize/unserializ性能测试
    Asp.Net中GridView加入鼠标滑过的高亮效果和单击行颜色改变
    创建sqlserver数据库脚本 范例
    搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (二)创建你的项目
    搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层
    创建SqlServer数据库触发器脚本 范例
    vss2005管理vs2010项目
    搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境
  • 原文地址:https://www.cnblogs.com/LeeWenjie/p/500731.html
Copyright © 2011-2022 走看看