家庭视频监控系统(11)

例程13 代码位置:光盘\TM\01\VWMS\VWMS\frmLogin.cs

private void txtName_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar == 13) //判断是否按下Enter键

{

txtPwd.Focus(); //使“密码”文本框获得焦点

e.Handled = true;

}

}

private void txtPwd_KeyPress(object sender, KeyPressEventArgs e)

{

if (e.KeyChar == 13) //判断是否按下Enter键

{

btnLogin.Focus(); //使“登录”按钮获得焦点

e.Handled = true;

}

}

单击“退出”按钮,退出当前应用程序。“退出”按钮的Click事件的代码如下:

例程14 代码位置:光盘\TM\01\VWMS\VWMS\frmLogin.cs

private void btnExit_Click(object sender, EventArgs e)

{

Application.Exit(); //退出当前应用程序

}

1.5.4 单元测试

在现代软件开发过程中,测试不再作为一个独立的生命周期。单元测试成为与编写代码同步进行的开发活动。单元测试能够提高程序员对程序的信心,保证程序的质量,加快软件开发速度,使程序易于维护。下面对单元测试及常用的单元测试工具进行简单介绍。

1.单元测试概述

单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

在一种传统的结构化编程语言(如C语言)中,要进行测试的单元一般是函数或子过程。在像C++这样的面向对象的语言中,要进行测试的基本单元是类。单元测试不仅仅是作为无错编码的一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。

经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review)、静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读、查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪、时间分析以及测试覆盖度方面的信息。

2.单元测试的优点

一种验证行为

程序中的每一项功能都是通过测试来验证它的正确性。它为以后的开发提供支援。就算是开发后期,也可以轻松地增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样,可以更自由地对程序进行改进。

一种设计行为

编写单元测试将使我们从调用者的角度观察、思考,特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。

一种编写文档的行为

单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。

有回归性

自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地地快速运行测试。

3.越到项目后期,单元测试为何越难进行

在很多项目的初期,项目中的大部分程序员都能够自觉地去编写单元测试。随着项目的进行,任务加重、离交付时间越来越近、不能按时完成项目的风险越来越大,单元测试就往往成为牺牲品了。项目经理因为进度的压力不再重视,程序员也因为编码的压力和无人看管而不再为代码编写单元测试了。笔者亲身经历的项目都或多或少地发生过类似的事情。越是在项目的后期,能坚持编写单元测试的程序就在整个项目组中占很低的项目比例。

为了追赶项目进度,多数程序员将没有经过任何测试的程序代码上传到版本控制系统,项目经理也不再追问,照单全收。这样做的结果就是在项目后期,技术骨干人员只好加班加点进行系统集成。集成完了之后,下发给测试人员测试时,BUG的报告数量翻倍增长。程序员开始修改BUG,但是还有非常多的BUG隐藏更深,一直潜伏到生产环境中去。

总之,在现代软件开发过程中,测试不再作为一个独立的生命周期。单元测试成为与编写代码同步进行的开发活动。单元测试能够提高程序员对程序的信心,保证程序的质量,加快软件开发速度,使程序易于维护。

4.NUnit单元测试工具的介绍与使用

NUnit使用前介绍

NUnit是一个单元测试工具,专门测试.NET开发的程序,同类产品还包括Junit(Java)、CPPUnit(C++),都属于xUnit中的成员。NUnit是xUnit家族中的第4个主打产品,完全由C#语言来编写,目前NUnit的最新版本是NUnit 2.4.3,可以到https://www.nunit.org/网址下载。

下面正式讲解NUnit。在讲解之前看一下单元测试的运行效果图,如图1.12和图1.13所示。

在图1.12和图1.13中,非常容易发现状态条颜色不同,图1.12中是绿色的,而图1.13中是红色的。因为如果所有测试案例运行成功,就为绿色;反之,如果有一个不成功,则为红色。

在右边面板的中间,可以看到测试进度条。进度条的颜色反映了测试执行的状态。

? 绿色:表示目前所执行的测试都通过。

? 黄色:意味某些测试忽略,但是这里没有失败。

? 红色:表示有失败。

? 使用NUnit进行单元测试

下面按步骤讲解如何在.NET中使用NUint工具。

(1)为单元测试代码创建一个Visual Studio 2008 类库项目,并命名为NUNIT,如图1.14所示。

(2)增加一个NUnit框架引用。在创建NUNIT项目中需要增加一个nunit.framework.dll引用。首先,在菜单栏中选择“项目”/“添加引用”命令,弹出如图1.15所示的“添加引用”对话框,然后在安装的Nunit 2.4.3单元测试工具的目录下(安装所在盘:\Program Files\Nunit 2.4.3\bin)找到nunit. framework.dll文件,单击“确定”按钮,即可引用到项目中。

 

读书导航