C#三层架构4
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
代码覆盖
代码覆盖是度量单元测 试运行时测试了多少代码
未测试 到的代码
如何启用代码覆盖功能? 如何启用代码覆盖功能?
代码覆盖
1、双击“本地测试运行设置文件( localtestrun.testrunconfig )” 、双击“本地测试运行设置文件(
2、在配置对话框中选择“代码覆盖率”,选中“要检测的项目”,单击 、在配置对话框中选择“代码覆盖率” 选中“要检测的项目” 应用
错误 程序出现故障 311320 余额= 余额= 20000-25000 系统崩溃 李四
0
张三转账25000到李四的账户上 到李四的账户上 张三转账 为了防止系统崩溃我们需要使用异常处理
什么异常处理
执 行
程序
代码错误
资源 不可用
异常
公共语言运 行库遇到意外
程序
恢复
异பைடு நூலகம்处理
平台下我们如何使用异常处理? 在.NET平台下我们如何使用异常处理?首先要了解 平台下我们如何使用异常处理 首先要了解Exception类 类
杂质
过滤水
使用异常处理
程序中, :在C#程序中,如何使用异常处理 程序中
1 2
使用Try...Catch块捕获异常 块捕获异常 使用 使用throw 再次引发异常 使用
如何使用throw得到更多的异常信息? 得到更多的异常信息? 如何使用 得到更多的异常信息
使用异常处理
public IList<Student> GetAllStudents() { IList<Student> students = new List<Student>(); try { //调用数据访问层 students = studentService.GetAllStudents(); } catch (Exception ex) { throw new Exception(ex.ToString()); } return students; }
编写测试
常用断言如下: 常用断言如下:
断言 AreEqual () Inconclusive () IsTrue () IsNull () IsNotNull () IsFalse() 说明 测试指定的值是否相等, 测试指定的值是否相等,如果不等测试失败 表示一个未验证的测试 测试指定的条件是否为true,如果为 如果为false测试失败 测试指定的条件是否为 如果为 测试失败 测试指定的对象是否为空引用,如果不为空, 测试指定的对象是否为空引用,如果不为空,测试失 败 测试指定的对象是否为非空,如果为空, 测试指定的对象是否为非空,如果为空,测试失败 测试指定条件是否为false,如果该条件为 测试指定条件是否为 如果该条件为true,测试失 测试失 如果该条件为 败
创建测试
新生成与单元测试相关的文件有: 新生成与单元测试相关的文件有:
文件名 AuthoringTest.txt 目的 提供关于创建测试的说明, 提供关于创建测试的说明,包括向项目 增加其他测试的说明 包含StudentManager类生成的测试,以 类生成的测试, 包含 类生成的测试 及测试初始化和测试清除方法 测试管理文件 本地测试运行设置文件
本章任务
在业务逻辑层定制异常处理
在业务逻辑层创建单元测试
本章目标
会使用异常处理 会使用VSTS写单元测试 写单元测试 会使用
为什么需要异常处理
trade() { sendquery(); } ……. …….
数据库
帐户 300123 姓名 张三 拒绝交易 余额
20,000
47,000
系统将查询发送到数据库中 300124 王五 网上银行
如何修改断言( )?得到正式的测试 如何修改断言(Assert)?得到正式的测试 )?
编写测试
[TestMethod()] public void AddStudentTest() {// TODO: 初始化为适当的值 global::MySchool.Models.Student student =new global::MySchool.Models.Student(); 在测试项目中添加 student.LoginId = "test3"; 被测单元需要的配置文件 student.LingPwd = "test3"; erStateId = 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 未返回所需的值。"); 未返回所需的值。 }
Exception类 类
.NET Framework
System.Exception
公共语言运行 时引发的异常
用户程序 引发的异常
System.SystemException
System.ApplicationException
System.ArgumentException System ArgumentException System.Reflection.TargetException System.ArithmeticException System.ArgumentNullException System.Data.DataException
什么是VSTS单元测试 单元测试 什么是
Visual Studion 集成的单元测试框架
如何用VSTS写单元测试 写单元测试 如何用
1、创建测试 2、编写测试 3、运行测试 4、代码覆盖
创建测试
:在业务逻辑层为学员账户创建方法创建单元测试
1、右键单击“AddStudent”方法,然后选择“创建单元测试” 、右键单击“ 方法, 方法 然后选择“创建单元测试”
System.FormatException
System.DivideByZeroException
System.OverflowException System.IO.IOException
Exception类都有哪些属性使我们进一步了解它 类都有哪些属性使我们进一步了解它? 类都有哪些属性使我们进一步了解它
InnerException
用Exception类如何捕获异常 类如何捕获异常
如何捕获异常
回顾try和 回顾 和catch块的使用 块的使用
滤水器 filter_water() try { { try //程序代码 程序代码 } { 水; //程序代码 程序代码 } catch (Exception E) { catch { //错误处理代码 错误处理代码 //错误处理代码 杂质 错误处理代码 杂质; } } } …….
小结
使用异常处理的主要目的是什么? 使用异常处理的主要目的是什么? .NET Framework引发的异常有哪两类? 引发的异常有哪两类? 引发的异常有哪两类 如何捕获异常? 如何捕获异常?
为什么需要单元测试
单元测试是保证软件质量的具体操作方法
什么是单元测试
PDA在出厂之前,会对每一个零部件进行测试——单元测试 在出厂之前,会对每一个零部件进行测试 在出厂之前 单元测试
第四章
异常处理与单元测试
回顾
实体类在三层结构中主要作用是什么? 实体类在三层结构中主要作用是什么? using语句的主要作用是什么? 语句的主要作用是什么? 语句的主要作用是什么
预习检查
1、在.NET平台下引发异常的原因有哪些? 、 平台下引发异常的原因有哪些? 平台下引发异常的原因有哪些 2、.NET Framework引发的异常有几类? 、 引发的异常有几类? 引发的异常有几类 3、单元测试中代码覆盖率的主要作用是什么? 、单元测试中代码覆盖率的主要作用是什么?
创建测试
2、在“创建单元测试”对话框中选择“输出项目”为“Visual 、 创建单元测试”对话框中选择“输出项目” C# ” 3、单击“确定”,输入测试项目名称为“MySchoolTest”,单击“创建” 、单击“确定” 输入测试项目名称为“ ,单击“创建”
测试项目名称
选择输出项目类型 “Visual C#”
System.IndexOutOfRangeException
Exception类 类
属性名称
Source Message StackTrace
说明
此属性表示导致异常发生的应用程序或对象 的名称 提供引起异常的详细信息 此属性提供在堆栈上所调用方法的详细信息, 此属性提供在堆栈上所调用方法的详细信息, 并首先显示最近调用的方法 对内部异常的引用, 对内部异常的引用,如果此异常基于前一个 异常, 异常,则内部异常指最初发生的异常
Thank you
运行测试
测试运行的方式有两种 1
用调试启动选定的测试项目
2
启动选定的测试项目(不调试) 启动选定的测试项目(不调试)
测试运行的结果有两种 1
通过
2
失败
如何查看测试失败的详细信息
运行测试
我们选定测试并双击
显示AddStudentTest[Results]窗口 窗口 显示
单元测试的一个关键指标是: 单元测试的一个关键指标是:代码覆盖
如何查看代码覆盖率? 如何查看代码覆盖率?
代码覆盖
3、点击“代码覆盖率结果” 、点击“代码覆盖率结果”
双击被测单元
总结
在异常处理中throw的主要作用是什么? 的主要作用是什么? 在异常处理中 的主要作用是什么 如何获得更多的异常信息? 如何获得更多的异常信息? 为什么要使用单元测试? 为什么要使用单元测试? VSTS下生成的测试项目是否支持调试功能? 下生成的测试项目是否支持调试功能? 下生成的测试项目是否支持调试功能
StudentManagerTest.cs MySchoolPro.vsmdi localtestrun.testrunconfig
如何在VSTS生成的测试框架基础上编写测试? 生成的测试框架基础上编写测试? 如何在 生成的测试框架基础上编写测试
编写测试
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单元测试是基于断言(Assert)的测试 单元测试是基于断言( 单元测试是基于断言 )