单元八:元件软件测试 报告人:谢兆贤 2015/9/X
纲要 单元测试介绍 单元测试的内容 单元测试的环境 单元测试的实施步骤 单元测试结论 单元测试范例 课后练习 参考资料
单元测试是最早期的测试,保证该单元的功能与设计文件中的描述一致。 单元测试介绍 单元测试是最早期的测试,保证该单元的功能与设计文件中的描述一致。 对软件的可分离的、独立的、最小的功能部分进行测试。 将类别中的方法视为细小的个体,并且针对这些个体做测试。
单元测试是一种设计,通常视为附属物编码步骤。 单元测试介绍 单元测试是一种设计,通常视为附属物编码步骤。 单元测试除了可以检测我们程序代码的质量,同时是一张安全网,在整个开发过程当中当我们对程序代码作任何新增或变动时保护我们的程序代码不至于受到破坏。 单元测试用来提升开发速度及质量。
所谓的单元指的是: 单元测试介绍 软件里面最小的、并且可以独立执行编码的单位。 采用流程语言程序设计软件,而单元可有一个或多个接近函数组成。 采用面向对象语言设计软件,而单元可有一个或多个类别跟方法组成。
单元测试都是有各部分的程序设计师完成,所以必须订立一套统一标准,维护测试质量。 单元测试介绍 单元测试都是有各部分的程序设计师完成,所以必须订立一套统一标准,维护测试质量。 注意的项目就有: 列出单元测试过程、每项内容和判断准则 所有参考文件与实例 安排的测试时间与目标 列出测试的方法种类 重复测试结果是否相同…等
單元測試的內容 單元測試內容
单元测试针对以下五个内容去进行检查: 單元測試的內容 模块界面(interface) 主要是为了检查输入与输出的数据是否正确。 区域数据结构(local data structures) 检查区域数据结构是否能保持完整性。 边界测试(boundary conditions) 检查临界数据是否正确处理 模块独立执行路径(independent paths) 检查由于计算错误、判定错误、控制流错误导致产生的程序错误。 错误处理测试(error-handling paths) 检查内部错误处理设施是否有用。
单元测试的环境 单元测试的环境构成
对于每一组输入,都应该会有预期的正常结果。 如果模块不是独立的程序,就会需要辅助测试模块。有两种: 单元测试的环境 对于每一组输入,都应该会有预期的正常结果。 如果模块不是独立的程序,就会需要辅助测试模块。有两种: 驱动模块(Driver):所测模块的主程序。 残根模块(Stub):用来代替所测模块呼叫的子模块。
为了使测试方法化和流程化,所以我们制定了四个实施步骤: 单元测试的实施步骤 为了使测试方法化和流程化,所以我们制定了四个实施步骤: 制定测试计划:测试计划由单元开发人员依据具体现况去设计和制定。 测试计划评审:由测试人员进行,开发人员配合对测试计划进行评改与修改,以完成最终的测试计划。 测试计划的执行:由测试操作人员按照制定的测试计划流程化的进行,并且及时回馈。 测试结果分析与提交报告:由测试人员与开发人员共同对结果去进行分析、归纳,在提交测试文件报告。
單元測試的實施步驟 單元測試管理流程 測試計畫 測試設計 測試執行 測試紀錄 分析 缺陷追蹤 完畢 測試總結
同时软件的弹性也可以允许客户随时变更他们的需求,而不至于因新功能的修改或新增而导致程序的不稳定甚至破坏。因此可以提供客户更好的服务及信赖度。 单元测试结论 单元测试不是只有测试,它同时提供了一个安全观点给程序设计师设计,更进一步提供程序设计师信心。增加软件的弹性,可以让项目团队随时重整以便让程序变的更干净。 同时软件的弹性也可以允许客户随时变更他们的需求,而不至于因新功能的修改或新增而导致程序的不稳定甚至破坏。因此可以提供客户更好的服务及信赖度。
单元测试范例 范例 Step 1 显示 [建立单元测试] 对话框。以鼠标右键单击包含方法的程序代码档,然后单击 [建立单元测试],该对话框就会出现。单元测试会针对您在对话框的[类型]清单中选取的所有方法产生。 下图显示,此范例将针对 Credit 和 Debit 方法产生单元测试。
單元測試範例 範例
单元测试范例 范例 Step 2 产生单元测试之后,会建立程序代码档并且在您的方案总管中显示变更。 下图显示建立单元测试的结果。
单元测试范例 范例 Step 3 产生单元测试之后,会建立程序代码档并且在您的方案总管中显示变更。 下图显示建立单元测试的结果。
单元测试范例 范例 一般流程说明 在[建立单元测试] 对话框中选取的每一个方法会建立个别的单元测试。此范例针对 Credit和Debit方法产生单元测试 每一个产生的单元测试都有空的变量和占位符 Assert 陈述式 要让测试有意义,必须初始化变数并以适当的Assert陈述式取代占位符。此范例Credit 单元测试会保留产生时的原状,Debit 测试方法中的变量则会初始化,Assert 语句也会加以取代 初次产生单元测试时,方案会建立测试专案
单元测试范例 范例 一般流程说明 测试项目会针对您要测试的每一个类别建立个别的单元测试文件。此范例要测试的这两个方法属于同一类别。因此,只会有一个单元测试文件 BankAccountTest.cs。 执行测试后,结果会出现在 [测试结果] 窗口。
建立单元测试分成两个阶段 为单元测试产生基本架构 单元测试范例 建立单元测试 单元测试范例 建立单元测试 建立单元测试分成两个阶段 第一阶段是产生单元测试文件,其中包含测试的程序代码中每一个方法的测试方法基本架构版本。每一个基本架构测试方法,都是使用空变量和预留位置Assert陈述式所产生的 第二阶段是初始化变数,并以适当的语句取代占位符 Assert 语句 为单元测试产生基本架构 使用[建立单元测试]对话方块针对您要测试的程序代码中任何或所有方法产生单元测试
若要为单元测试产生基本架构 单元测试范例 建立单元测试 在 [Visual Studio 程序代码编辑器] 窗口中开启您要测试的程序代码 单元测试范例 建立单元测试 若要为单元测试产生基本架构 在 [Visual Studio 程序代码编辑器] 窗口中开启您要测试的程序代码 (仅适用 ASP.NET 服务) 如果您要测试 ASP.NET Web 服务,务必确定项目包含 .aspx 网页。 如果您在未包含 .aspx 网页的专案中为 Web 服务建立单元测试,在尝试执行测试时将会收到错误。 如需详细信息,请参阅 ASP.NET Web 服务的单元测试 以鼠标右键单击要测试的命名空间、类别或方法,然后单击 [建立单元测试] 在 [建立单元测试] 对话框中,选取要加入至单元测试文件之所有方法的复选框
若要为单元测试产生基本架构 单元测试范例 建立单元测试 单元测试范例 建立单元测试 若要为单元测试产生基本架构 (选择性) 单击 [设定],变更您要建立之单元测试的默认设定。 这些是 Visual Studio 设定,并且会套用至您建立的任何单元测试,直到您再次变更设定为止 命名设定:这些选项可让您在产生单元测试时,自定义测试档案、测试类别和测试方法的命名方式 预设将所有测试结果标示为结果不明:选取此复选框为每一个测试方法提供 Assert.Inconclusive() 语句做为占位符 Assert。 清除此复选框则会消除占位符 Assert 启用文件批注:选取此复选框为每一个测试方法提供占位符批注。 清除此复选框则会消除占位符批注
若要为单元测试产生基本架构 单元测试范例 建立单元测试 单元测试范例 建立单元测试 若要为单元测试产生基本架构 允许 InternalsVisibleTo 属性:选取此复选框可将标记为 Friend 或 Internal 的方法视为公用方法 (建议使用)。 清除此复选框则会使用私用存取子测试这些方法。 如需私用存取子的详细信息,请参阅 Private、Internal 和 Friend 方法的单元测试 (选择性) 若要针对组件中没有源代码的方法加入测试,请单击 [加入组件]。 如需详细信息,请参阅 HOW TO:在不使用源代码的情况下建立单元测试
若要为单元测试产生基本架构 单元测试范例 建立单元测试 在 [输出专案] 方块中,执行下列其中一项: 单元测试范例 建立单元测试 若要为单元测试产生基本架构 在 [输出专案] 方块中,执行下列其中一项: 若要建立新的测试项目,请选取新项目的语言,然后单击 [确定]。 [新增测试项目] 对话框随即出现。 您可以为项目命名,或是接受预设名称,然后单击 [建立] 若要将 [建立单元测试] 对话框中选取的方法附加到现有测试项目中的单元测试文件,请选取下拉式清单中的项目,然后单击 [确定]
若要将验证加入至单元测试 单元测试范例 将验证加入至单元测试 开启单元测试档案,然后找出您要将其变量初始化的单元测试 单元测试范例 将验证加入至单元测试 若要将验证加入至单元测试 开启单元测试档案,然后找出您要将其变量初始化的单元测试 找出单元测试中的变量指派。在新产生的测试中,变量指派会以 "TODO" 语句标示出来,提醒您自定义指派。 例如,以下即为需要编辑的典型指派: string target.owner = null; // TODO: Initialize to an appropriate value 指派适当的值给每个变数。 如需指派适当变量的范例,请参阅逐步解说:建立和执行单元测试中的<执行和编辑单元测试>程序 找出并编辑单元测试中的 Assert 语句。 如需可用的 Assert 语句的详细信息,请参阅使用 Assert 类别
若要将验证加入至单元测试 单元测试范例 将验证加入至单元测试 单元测试范例 将验证加入至单元测试 若要将验证加入至单元测试 (选择性) 使用 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间的 [TestInitialize()] 和 [TestCleanup()] 方法,为您的单元测试新增安装和清除程序代码。 当您产生单元测试时,「其他测试属性」区段会新增至您的单元测试档案中。 展开这个区段可以显示加了批注的方法,可用来包含初始化和清除
课后练习 解释所谓的单元为何? 单元测试针的五个内容为何? 单元测试的实施步骤为何?
參考資料 https://msdn.microsoft.com/zh-tw/library/vstudio/dd286656(v=vs.100).aspx