首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>软件工程>软件测试>详解单元测试中的问题和解决方案
详解单元测试中的问题和解决方案
来源: 发布时间:2008-03-15 发布人: 浏览: 人次   字体: [ ]  

利用单元测试,我们可以找出很多意想不到的问题,在Nunit对项目进行单元测试 过程中就查找出了很多隐藏的问题,下面是单元测试中遇到的问题与解决方案:

1.TQL_Part
1.1问题1
下面是项目中的代码:
  /// <summary>
        
/// 根据taskid,获得对应的Part记录
        
/// </summary>
        
/// <param name="taskId"></param>
        
/// <returns></returns>

        public WYEng.Model.TQL_Part GetPaperPart(int taskId)
        
{
            SqlParameter[] parm 
= new SqlParameter[1];
            parm[
0= new SqlParameter(PARM_TASKID, SqlDbType.Int);
            parm[
0].Value = taskId;
            WYEng.Model.TQL_Part part 
= new WYEng.Model.TQL_Part();

            
using (SqlDataReader rdr = XPWY.DBUtility.DBHelperSQL.ExecuteReader(SQL_SELECT_PART, parm))
            
{

                
while (rdr.Read())
                
{
                    part.PartCode 
= rdr.GetString(0);
                    part.SetCode 
= rdr.GetString(1);
                    part.SubjectId 
= rdr.GetInt32(2);
                    part.DisplayOrder 
= rdr.GetInt32(3);
                    part.Description 
= rdr.GetString(4);
                }


            }

            
return part;
        }
写测试用例如下:
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using WYEng.SQLServerDAL;

namespace WYEng.TestUnit
{
    [TestFixture]
    
public class TQL_Part
    
{
        SQLServerDAL.TQL_Part part;
        WYEng.Model.TQL_Part p;
        [SetUp]
        
public void CreateObject()
        
{
            part 
= new WYEng.SQLServerDAL.TQL_Part();
            p
=new WYEng.Model.TQL_Part();
        }


        [TearDown]
        
public void DeleteObject()
        
{
            part 
= null;
            p
=null;
        }


        [Test]
        
public void GetPaperPart()
        
{
            
//输入TaskId的值,然后可以获取其Part所有信息
            p = part.GetPaperPart(1); //正常情况
            Assert.AreEqual(p.PartCode, "6666");
        }

    }

}
运行Nunit,状态条为红色,经检查发现原因是
model层中的TQL_PArt的description下的代码段有问题
 if (value != null && value.Length > 50)
                    throw new ArgumentOutOfRangeException("Invalid value for Description", value, value.ToString());
数据库中description的字段为Varchar(500),而这里只为50,现在更正为 if (value != null && value.Length > 50)
修正后,运行后的状态条为绿色。
1.2问题2
然后GetPaperPart()方法中加入如下代码,测试边界情况:
            p = part.GetPaperPart(1000);//边界情况
            Assert.AreEqual(p, null);
用以上代码测试边界条件时,状态条为红色。
经检查,发现代码如下
public WYEng.Model.TQL_Part GetPaperPart(int taskId)
        
{
            SqlParameter[] parm 
= new SqlParameter[1];
            parm[
0= new SqlParameter(PARM_TASKID, SqlDbType.Int);
            parm[
0].Value = taskId;
            WYEng.Model.TQL_Part part 
= new WYEng.Model.TQL_Part();
 
            
using (SqlDataReader rdr = XPWY.DBUtility.DBHelperSQL.ExecuteReader(SQL_SELECT_PART, parm))
            
{
                    
while (rdr.Read())
                    
{
                        part.PartCode 
= rdr.GetString(0);
                        part.SetCode 
= rdr.GetString(1);
                        part.SubjectId 
= rdr.GetInt32(2);
                        part.DisplayOrder 
= rdr.GetInt32(3);
                        part.Description 
= rdr.GetString(4);
                    }

            }

            
return part;
        }

 用YEng.Model.TQL_Part part = new WYEng.Model.TQL_Part();实例化一个对象以后,如果rdr里面没有任何行,part的值也不为null,所以修改代码如下:
 
public WYEng.Model.TQL_Part GetPaperPart(int taskId)
        
{
            SqlParameter[] parm 
= new SqlParameter[1];
            parm[
0= new SqlParameter(PARM_TASKID, SqlDbType.Int);
            parm[
0].Value = taskId;
            WYEng.Model.TQL_Part part 
= new WYEng.Model.TQL_Part();
 
            
using (SqlDataReader rdr = XPWY.DBUtility.DBHelperSQL.ExecuteReader(SQL_SELECT_PART, parm))
            
{
                
if (!rdr.HasRows)
                
{
                    part 
= null;
                }

                
else
                
{
                    
while (rdr.Read())
                    
{
                        part.PartCode 
= rdr.GetString(0);
                        part.SetCode 
= rdr.GetString(1);
                        part.SubjectId 
= rdr.GetInt32(2);
                        part.DisplayOrder 
= rdr.GetInt32(3);
                        part.Description 
= rdr.GetString(4);
                    }

                }

            }

            
return part;
        }

运行Nunit后,状态为绿色,其他的类似问题也进行了相应的修正。
我正在研究Nunit单元测试,有不当的地方希望大家能指正,谢谢。下一篇,我将会讲一下,如何利用Nunit测试异常

相 关 文 章   发布商链接
·谈谈单元测试假成功和假失败的避免方...
·软件测试过程模型图介绍:V模型 W模...
·什么是单元测试?如何编写单元测试用...
·什么是黑盒测试及其测试常用的方法介...
·谈谈敏捷开发中的7种测试类型
·敏捷开发中的7种类型测试
·警惕一些容易被测试人员忽略的软件缺...
·举例谈谈项目测试工作指导性方案的思...
·测试过程的几个注意点助你提高测试的...
·保证测试的完备性的八条经验
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·谈谈敏捷开发中的7种测试类型...
·什么是黑盒测试及其测试常用...
·什么是单元测试?如何编写单元
·软件测试过程模型图介绍:V模
·谈谈单元测试假成功和假失败...
·如何使用NUnit进行并发测试?
·为什么需要软件测试及其软件...
·.net测试覆盖率工具:clover....
·软件测试过程中,测试数据如何
·几款开放源代码的软件测试工...
·测试人员应该如何报bug?
热 门 文 章
·软件测试过程模型图介绍:V模...
·什么是单元测试?如何编写单元...
·为什么需要软件测试及其软件...
·什么是黑盒测试及其测试常用...
·如何使用NUnit进行并发测试?
·软件测试过程中,测试数据如何...
·.net测试覆盖率工具:clover....
·软件测试缺陷报告实用写作技...
·测试人员应该如何报bug?
·几款开放源代码的软件测试工...
·软件测试中如何做好bug统计的...
·谈谈单元测试假成功和假失败...
·软件测试中常用的一些技巧与...
·测试过程的几个注意点助你提...
·保证测试的完备性的八条经验
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .