`
yangshen998
  • 浏览: 1247238 次
文章分类
社区版块
存档分类
最新评论

单元测试实践的主要问题与解决(5)

 
阅读更多

(承上篇)

3.2 如何解决“做不了”

上面我们只是用一个独立的函数来演示ETDD过程。在实际的工作中,代码之间通常是互相依赖的,这种依赖关系会造成测试难于进行,这就是“做不了”的问题。

我们首先来分析一下。“做不了”主要是指可测性问题。可测性问题的核心是内部输入。在解释内部输入前,我们先来看一下一般的输入:外部输入。

外部输入是指在被测代码的外部可以设定的输入,包括参数、成员变量、全局变量。外部输入一般可以直接设定。

单元测试的核心难点在于内部输入,什么是内部输入呢?
像下面这个例子,这两个数据,都是在被测试代码的内部,通过调用关联代码来取得,也就是内部取得的数据。对于内部取得的数据,代码要如何处理呢?跟参数一样,也是分类处理。因此,测试时也要分类检测,这就是内部输入。

内部输入有六种情形,我们利用工具都可以处理。

解决内部输入的主要方法有打桩、模拟对象、底层模拟。
先来介绍打桩。桩就是代替真实代码的一些代码。桩的功能主要有隔离、补齐和控制。可以通过编写桩代码,来解决内部输入问题。这是桩的控制功能。

用打桩来解决内部输入,有一些问题:一是编写桩代码增加了工作量;二是内部输入和外部输入分离,难于管理;三是只能解决部分内部输入问题。例如,要在一个用例中多次调用同一关联函数,要求每次输出不同,桩代码就很难做到。

解决内部输入的另一个方法是模拟对象,这个比较复杂,另外,对于C和C++也不太适用。我们可以采用底层模拟来解决内部输入问题。

底层模拟有三个特点:一是内部输入与外部输入一起管理;二是不需要考虑关联代码的状态,无所关联代码是否存在,是否隔离,都可以直接使用;三是不需要编写代码。

下面我也用一个案例来讲解一下底层模拟。这个示例,是一个空调控制程序。

代码的功能,是首先取得环境的温度,然后与预设的目标温度比较,计算出温度差,温度每差一度,制冷器运行60秒。

首先,我们设定外部数据。假设,预设的目标温度是25度,是这个全局变量,设为25。返回值为1,表示操作成功。假设环境温度是28度,那么,制冷器应该运行180秒,这里填180。然后执行测试。

由于环境温度还没有设定,测试进行不下去。环境温度由这个函数来取得。即使这个函数可以正常工作,取到的环境温度也不可能满足我们的测试需求。我们可以用底层模拟来解决。



(未完待续)
分享到:
评论

相关推荐

    单元测试实践的主要问题与解决

    做到了这两点,就可以说,代码的功能  本文是我在“第十届中国系统与软件过程改进年会广东会场”所作演讲的整理稿,主要分享单元测试的一些要点、单元测试实践的主要问题,以及如何来解决这些问题。  一、单元测试...

    单元测试十大难题及解决思路

    实践中走出来的理论。概括说明了单元测试中遇到的难题,以及解决的思路。

    C-C++ 单元自动化测试解决方案实践.doc

    C-C++ 单元自动化测试解决方案实践.doc

    单元测试实践小结[1]

    单元测试实践小结[1]单元测试工具应用单元测试,首先要解决的是单元测试的关注点。测试的关注点在于测试逻辑,只要有逻辑就要写测试代码。测试的手段就是验证所有被测试方法的所有产出物,包括:1.测试方法的返回值2...

    Visual Unit (C/C++单元测试工具) V2.8

    真正解决了单元测试实践的诸多核心难题,能有效帮助程序员提高代码质量和开发效率。 试用方法:下载安装本程序后即为演示版,可以测试示例代码,初步了解VU软件基本功能和使用方法;然后在VU“帮助”菜单,单击...

    使用ConTest进行多线程单元测试

    即使彻底地对它们进行了调试,常规的单元测试实践也很可能遗漏并行bug。在本文中,并行专家ShmuelUr和YardenNir-Buchbinder解释了为什么并行bug如此难于捕获并且介绍了IBMResearch的一种新的解决方案。并行程序易于...

    软件测试技术基础--源代码及解决方案光盘

    普通高等学校计算机专业精品课程教材 源代码及解决方案...第三部分从测试阶段的角度描述了单元测试、集成测试和系统测试的内容及过程。第四部分涵盖测试人员日常工作的两大内容。第五部分讨论了自动化测试的基础理论。

    cpp_agile:利用自动化单元测试和测试驱动开发的CC ++编程实验室

    利用自动化单元测试和测试驱动的开发敏捷软件开发实践的C / C ++编程实验室。 这些实验室是使用Visual Studio 2019社区版IDE开发的。 集成到Visual Studio中的Microsoft Visual C ++(MSVC)编译器用于编译C ++程序...

    SpringCloudContract契约测试实践

    众所周知,分布式系统是由众多微服务构成,并按照功能模块划分后,由不同的开发小组进行维护.研发模型如下图所示: 开发人员完成某一个...为了解决上述的弊端,研发团队通常会引入了单元测试,并使用EasyMock,Mokito等框架

    practical-unit-testing-solutions:Tomek Kaczanowski撰写的“使用JUnit和Mockito进行实践单元测试”一书中的练习解决方案

    实用单元测试解决方案Tomek Kaczanowski撰写的“使用JUnit和Mockito进行实践单元测试”一书中的练习解决方案

    实习报告-软件测试实习报告.doc

    软件测试实习报告 软件测试...而这三个时期整体又分为七个阶段,他们分别是:问题定义、可行性研 究、需求分析、总体设计、详细设计、编码和单元测试、综合测试,由此可看出,当我 们开发一个项目时,更多的精力不是放

    慕课-程序设计入门——C语言-单元测试题.zip

    这些实践环节有助于提高学生的动手能力和解决问题的能力,使他们更好地将理论知识应用于实际项目中。 综上所述,C语言课程设计具有基础性强、可移植性好、效率高、结构清晰、资源丰富和实践性强等优点。通过C语言的...

    《数字IC设计:方法技巧与实践》唐杉,徐强,王莉薇 著

    《数字IC设计--方法、技巧与实践》唐杉,徐强,王莉薇 著 此书的完整电子版,本人从淘宝上花钱买的,在此奉献大家。 目录 前言 第1章:背景知识 集成电路工艺、分类和设计方法的演进 集 成电路工艺介绍 集成电路的...

    基于java-20_JAVA单元测试接口作业-源码.zip

    通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的...

Global site tag (gtag.js) - Google Analytics