(承上篇)
3.2 如何解决“做不了”
上面我们只是用一个独立的函数来演示ETDD过程。在实际的工作中,代码之间通常是互相依赖的,这种依赖关系会造成测试难于进行,这就是“做不了”的问题。
我们首先来分析一下。“做不了”主要是指可测性问题。可测性问题的核心是内部输入。在解释内部输入前,我们先来看一下一般的输入:外部输入。
外部输入是指在被测代码的外部可以设定的输入,包括参数、成员变量、全局变量。外部输入一般可以直接设定。
单元测试的核心难点在于内部输入,什么是内部输入呢?
像下面这个例子,这两个数据,都是在被测试代码的内部,通过调用关联代码来取得,也就是内部取得的数据。对于内部取得的数据,代码要如何处理呢?跟参数一样,也是分类处理。因此,测试时也要分类检测,这就是内部输入。
内部输入有六种情形,我们利用工具都可以处理。
解决内部输入的主要方法有打桩、模拟对象、底层模拟。
先来介绍打桩。桩就是代替真实代码的一些代码。桩的功能主要有隔离、补齐和控制。可以通过编写桩代码,来解决内部输入问题。这是桩的控制功能。
用打桩来解决内部输入,有一些问题:一是编写桩代码增加了工作量;二是内部输入和外部输入分离,难于管理;三是只能解决部分内部输入问题。例如,要在一个用例中多次调用同一关联函数,要求每次输出不同,桩代码就很难做到。
解决内部输入的另一个方法是模拟对象,这个比较复杂,另外,对于C和C++也不太适用。我们可以采用底层模拟来解决内部输入问题。
底层模拟有三个特点:一是内部输入与外部输入一起管理;二是不需要考虑关联代码的状态,无所关联代码是否存在,是否隔离,都可以直接使用;三是不需要编写代码。
下面我也用一个案例来讲解一下底层模拟。这个示例,是一个空调控制程序。
代码的功能,是首先取得环境的温度,然后与预设的目标温度比较,计算出温度差,温度每差一度,制冷器运行60秒。
首先,我们设定外部数据。假设,预设的目标温度是25度,是这个全局变量,设为25。返回值为1,表示操作成功。假设环境温度是28度,那么,制冷器应该运行180秒,这里填180。然后执行测试。
由于环境温度还没有设定,测试进行不下去。环境温度由这个函数来取得。即使这个函数可以正常工作,取到的环境温度也不可能满足我们的测试需求。我们可以用底层模拟来解决。
(未完待续)
分享到:
相关推荐
在进行iOS单元测试时,为了能够有效地进行代码测试和保证软件质量,开发者们通常会遵循一系列的最佳实践。这些最佳实践不仅能够帮助开发者们更加高效地编写测试用例,还能够确保测试用例能够覆盖应用的关键部分,...
【单元测试实践实验报告】 单元测试是软件开发过程中的关键环节,它主要针对程序的最小可测试单元,如函数、方法或对象进行验证,确保它们按照预期执行。本实验报告将详细阐述实验内容,包括使用的测试工具、静态...
### 软件测试基础之单元测试详解 #### 核心知识点概览 - **单元与单元测试概念解析** - **单元测试的主要任务** - **单元测试执行过程*...通过对单元测试的深入理解和实践,开发者能够构建更加健壮、可靠的应用系统。
本话题主要关注Android单元测试,特别是结合了Volley网络库的测试实践,以及如何利用Mockito这样的模拟工具进行测试。 **Android单元测试** Android单元测试通常是指在没有实际设备或模拟器的情况下,对应用程序的...
本资源包精心汇总了五类重要的软件测试文档模版,包括单元测试计划、单元测试报告、测试方案、功能测试报告以及性能测试报告,这些都是软件测试工作中不可或缺的部分。 1. **单元测试计划**: 单元测试计划是软件...
《Java测试与设计——从单元测试到Web测试》这一主题深入探讨了软件开发中的关键环节:测试。在软件工程中,测试是确保软件质量、功能完整性和用户满意度的重要步骤。本文将围绕“单元测试”和“Web测试”两个核心...
5. **断言与异常处理**:在单元测试中,断言用来验证代码行为是否符合预期。Vector Cast支持多种断言,包括基本的等于、不等于、大于、小于等比较,以及更复杂的逻辑断言。同时,它还能够捕获和处理异常,确保测试...
### Python技术单元测试实践 #### 一、为什么需要单元测试? 在软件开发的过程中,单元测试是一种重要的质量保证手段。随着软件复杂度的增加和技术的进步,确保代码的质量和功能的完整性变得越来越重要。单元测试...
传统的单元测试通常不涉及外部资源,但当测试的对象直接与数据库交互时(例如DAO层),就需要确保数据库处于一个已知且可预测的状态。DBunit允许开发者在测试前将数据库的状态设定为一个特定的状态,并在测试结束后...
* 本文所描述的自动化生成单元测试用例的解决方案基于 GCC 插件来实现。 * 该解决方案可以生成边界测试用例,且函数参数可边界值实现全排列,大大降低用例遗漏风险。 知识点5:使用注解 tu::case 生成用户自定义...
### 持续集成与单元测试 #### 一、引言 随着软件开发行业的快速发展,对软件质量和开发效率的要求也越来越高。在软件开发过程中,如何有效地提高开发质量、确保核心模块的质量成为了一个重要的议题。本篇文章将...
通过遵循正确的单元测试实践,如避免不必要的测试、编写有目的性的测试用例以及采用对象工厂模式等,我们可以大大提高软件开发的效率和质量。希望本文档能为您的单元测试实践提供有价值的指导。
此外,单元测试还有助于减少集成测试和系统测试的时间,因为大部分问题已在单元测试阶段得到解决。 市面上有许多单元测试框架,如C++的CPPUnit和Visual Studio的Visual Unit,它们提供了方便的API和工具,帮助...
Flex持续集成之单元测试是开发过程中一个至关重要的环节,它主要关注的是Flex应用程序的模块化测试,确保每个独立的代码单元都能正常工作。通过单元测试,开发者可以预先发现和修复问题,提高代码质量和稳定性,同时...
#### 单元测试实践 1. **设计原则**: - 每个测试案例应该只关注一个具体的测试目标。 - 测试案例应当是独立且自包含的。 - 使用断言来验证预期结果。 - 尽量模拟真实场景进行测试。 2. **常见问题及解决策略*...