资源描述
异常异常异常异常处处理与理与理与理与单单元元元元测试测试第四章第四章第四章第四章回顾回顾实体类在三层结构中主要作用是什么?实体类在三层结构中主要作用是什么?using语句的主要作用是什么?语句的主要作用是什么?预习检查预习检查1、在、在.NET平台下引发异常的原因有哪些?平台下引发异常的原因有哪些?2、.NET Framework引发的异常有几类?引发的异常有几类?3、单元测试中代码覆盖率的主要作用是什么?、单元测试中代码覆盖率的主要作用是什么?本章任务本章任务在业务逻辑层定制异常处理在业务逻辑层定制异常处理在业务逻辑层创建单元测试在业务逻辑层创建单元测试本章目标本章目标会使用异常处理会使用异常处理会使用会使用VSTS写单元测试写单元测试trade()sendquery();.为什么需要异常处理为什么需要异常处理帐户姓名 余额300123张三三300124王五王五47,000311320李四李四网上银行网上银行 张三转账张三转账25000到李四的账户上到李四的账户上020,000数据库数据库系统将查询发送到数据库中系统将查询发送到数据库中拒绝交易拒绝交易 余额余额 20000-25000错误错误 程序出现故障程序出现故障 系统崩溃系统崩溃为了防止系统崩溃我们需要使用异常处理为了防止系统崩溃我们需要使用异常处理什么异常处理什么异常处理代码错误代码错误 公共语言运公共语言运 行库遇到意外行库遇到意外 资源资源 不可用不可用 异常异常 程序程序 执执行行异常处理异常处理 恢复恢复程序程序 在在.NET平台下我们如何使用异常处理?首先要了解平台下我们如何使用异常处理?首先要了解Exception类类 Exception类类.NET Framework 公共语言运行公共语言运行时引发的异常时引发的异常用户程序用户程序引发的异常引发的异常Exception类都有哪些属性使我们进一步了解它类都有哪些属性使我们进一步了解它?Exception类类属性名称属性名称说明说明Source 此属性表示导致异常发生的应用程序或对象此属性表示导致异常发生的应用程序或对象的名称的名称 Message提供引起异常的详细信息提供引起异常的详细信息StackTrace 此属性提供在堆栈上所调用方法的详细信息,此属性提供在堆栈上所调用方法的详细信息,并首先显示最近调用的方法并首先显示最近调用的方法 InnerException对内部异常的引用,如果此异常基于前一个对内部异常的引用,如果此异常基于前一个异常,则内部异常指最初发生的异常异常,则内部异常指最初发生的异常用用Exception类如何捕获异常类如何捕获异常如何捕获异常如何捕获异常回顾回顾try和和catch块的使用块的使用滤水器滤水器 filter_water()try 水水;catch 杂质杂质;.过滤水过滤水 杂质杂质/程序代码程序代码/错误处理代码错误处理代码 try/程序代码程序代码catch(Exception E)/错误处理代码错误处理代码使用异常处理使用异常处理:在:在C#程序中,如何使用异常处理程序中,如何使用异常处理 使用使用throw 再次引发异常再次引发异常2使用使用Try.Catch块捕获异常块捕获异常1如何使用如何使用throw得到更多的异常信息?得到更多的异常信息?使用异常处理使用异常处理public IList GetAllStudents()IList students=new List();try /调用数据访问层调用数据访问层 students=studentService.GetAllStudents();catch(Exception ex)throw new Exception(ex.ToString();return students;小结小结使用异常处理的主要目的是什么?使用异常处理的主要目的是什么?.NET Framework引发的异常有哪两类?引发的异常有哪两类?如何捕获异常?如何捕获异常?为什么需要单元测试为什么需要单元测试单元测试是保证软件质量的具体操作方法单元测试是保证软件质量的具体操作方法什么是单元测试什么是单元测试PDA在出厂之前,会对每一个零部件进行测试在出厂之前,会对每一个零部件进行测试单元测试单元测试 什么是什么是VSTS单元测试单元测试Visual Studion 集成的单元测试框架集成的单元测试框架如何用如何用VSTS写单元测试写单元测试1 1、创建测试、创建测试2 2、编写测试、编写测试3 3、运行测试、运行测试4 4、代码覆盖、代码覆盖创建测试创建测试:在业务逻辑层为学员账户创建方法创建单元测试:在业务逻辑层为学员账户创建方法创建单元测试1、右键单击、右键单击“AddStudent”方法,然后选择方法,然后选择“创建单元测试创建单元测试”创建测试创建测试2、在、在“创建单元测试创建单元测试”对话框中选择对话框中选择“输出项目输出项目”为为“Visual C#”选择输出项目类型选择输出项目类型“Visual C#”测试项目名称测试项目名称3、单击、单击“确定确定”,输入测试项目名称为,输入测试项目名称为“MySchoolTest”,单击,单击“创建创建”创建测试创建测试新生成与单元测试相关的文件有:新生成与单元测试相关的文件有:文件名文件名目的目的AuthoringTest.txt提供关于创建测试的说明,包括向项目提供关于创建测试的说明,包括向项目增加其他测试的说明增加其他测试的说明StudentManagerTest.cs包含包含StudentManager类生成的测试,以类生成的测试,以及测试初始化和测试清除方法及测试初始化和测试清除方法MySchoolPro.vsmdi测试管理文件测试管理文件localtestrun.testrunconfig本地测试运行设置文件本地测试运行设置文件如何在如何在VSTS生成的测试框架基础上编写测试?生成的测试框架基础上编写测试?TestMethod()public void AddStudentTest()global:MySchool.BLL.StudentManager target=new global:MySchool.BLL.StudentManager();/TODO:初始化为适当的值初始化为适当的值 global:MySchool.Models.Student student=null;string expected=null;string actual;actual=target.AddStudent(student);Assert.AreEqual(expected,actual,MySchool.BLL.StudentManager.AddStudent 未返回所需的值。未返回所需的值。);Assert.Inconclusive(验证此测试方法的正确性。验证此测试方法的正确性。);编写测试编写测试VSTS生成的基本测试框架生成的基本测试框架VSTS单元测试是基于断言(单元测试是基于断言(Assert)的测试)的测试 测试指定的值是否相等,测试指定的值是否相等,如果不等测试失败如果不等测试失败表明这是个未表明这是个未验证的单元测试验证的单元测试编写测试编写测试断言断言说明说明AreEqual()测试指定的值是否相等,如果不等测试失败测试指定的值是否相等,如果不等测试失败Inconclusive()表示一个未验证的测试表示一个未验证的测试 IsTrue()测试指定的条件是否为测试指定的条件是否为true,如果为如果为false测试失败测试失败 IsNull()测试指定的对象是否为空引用,如果不为空,测试失测试指定的对象是否为空引用,如果不为空,测试失败败IsNotNull()测试指定的对象是否为非空,如果为空,测试失败测试指定的对象是否为非空,如果为空,测试失败IsFalse()测试指定条件是否为测试指定条件是否为false,如果该条件为如果该条件为true,测试失败测试失败常用断言如下:常用断言如下:如何修改断言(如何修改断言(Assert)?得到正式的测试)?得到正式的测试 TestMethod()public void AddStudentTest()/TODO:初始化为适当的值初始化为适当的值 global:MySchool.Models.Student student=new global:MySchool.Models.Student();student.LoginId=test3;student.LingPwd=test3;student.UserStateId=1;student.StudentName=test3;student.StudentNO=test3;student.Sex=男男;student.ClassID=1;string expected=“学员学员账户创建成功账户创建成功!string actual;actual=MySchool.BLL.StudentManager.AddStudent(student);Assert.AreEqual(expected,actual,MySchool.BLL.StudentManager.AddStudent 未返回所需的值。未返回所需的值。);编写测试编写测试在测试项目中添加在测试项目中添加被测单元需要的配置文件被测单元需要的配置文件运行测试运行测试 测试运行的方式有两种测试运行的方式有两种 测试运行的结果有两种测试运行的结果有两种如何查看测试失败的详细信息如何查看测试失败的详细信息1用调试启动选定的测试项目用调试启动选定的测试项目2启动选定的测试项目(不调试)启动选定的测试项目(不调试)1通过通过2失败失败运行测试运行测试我们选定测试并双击我们选定测试并双击显示显示AddStudentTestResults窗口窗口单元测试的一个关键指标是:单元测试的一个关键指标是:代码覆盖代码覆盖代码覆盖代码覆盖代码覆盖是度量单元测代码覆盖是度量单元测试运行时测试了多少代码试运行时测试了多少代码未测试未测试到的代码到的代码如何启用代码覆盖功能?如何启用代码覆盖功能?代码覆盖代码覆盖1、双击、双击“本地测试运行设置文件(本地测试运行设置文件(localtestrun.testrunconfig)”2、在配置对话框中选择、在配置对话框中选择“代码覆盖率代码覆盖率”,选中,选中“要检测的项目要检测的项目”,单击应,单击应用用 如何查看代码覆盖率?如何查看代码覆盖率?代码覆盖代码覆盖3、点击、点击“代码覆盖率结果代码覆盖率结果”双击被测单元双击被测单元总结总结在异常处理中在异常处理中throw的主要作用是什么?的主要作用是什么?如何获得更多的异常信息?如何获得更多的异常信息?为什么要使用单元测试?为什么要使用单元测试?VSTS下生成的测试项目是否支持调试功能?下生成的测试项目是否支持调试功能?
展开阅读全文