当我第一次听说可以使用框架比如JUnit来进行单元测试的时候,我惊叹这真是一个简单而强大的概念。它取代了随机测试,使你可以保存你的测试代码,并按照需要随时运行它们。按照我的理解,关于单元测试并没有多少产生误解的可能。但是过去的几年中,我确实见过几种或多或少不太正确的单元测试使用方式。这里按照重要程度,列出5条:
1. 跟协作逻辑一起来测试算法。如果跟协作逻辑代码分离开来,那么算法逻辑是最容易测试的。否则在你的逻辑被测试之前,你就不得不先进行诸如通过任务队列提交一个任务之类的工作。 任务队列部分只会使事情变得复杂。除非你想测试任务队列本身,否则你就应当把调用run方法时所执行的逻辑剥离开来,并对它进行单独测试。那样,不论是编码还是测试都会更易于编写和管理。
2. Mock测试太多。也许单元测试的最大好处就是它迫使你编写能够独立测试的代码。也就是说,你的代码会变得模块化。当你把你要处理的对象的周围的一切都模拟了,就没有什么能迫使你去把各部分分离开来。你会发现这样写出的代码,你很难在外围添加独立的部分 – 因为所有东西都纠缠在一起。 ”真是讽刺 – 模拟测试框架越强大,你在改进设计时所感受到的压力就会越小。”
3. 不使用断言。有时我会看到一些测试,里面创建了一个对象,调用了一些方法,然后,就没有然后了。也许它是在循环里这样做的,而且在创建和调用上会有些差异。但是,却没有用断言来做任何检查。这就完全失去了意义 – 没有检查你的代码是否按照预期进行工作的。当然,代码是运行了,但是仅此而已。如果抛出了一个异常,我们会注意到它,但是却不会验证其它任何事情。
4. 在测试代码中遗留print语句。我把这视为手工测试的后遗症 – 你希望看到对象的值来判断它们是否正确。但是所有的检查都应当使用断言来完成。如果单元失败了,你也能看到它,因为这个测试也会失败。当测试通过时,什么也不应当打印出来。在编写测试代码时,使用print语句有时是有用的。但是在需要用print的地方应当设置一个标志位,用来在进行测试的时候屏蔽它。
5. 查看日志信息,而不是运行结果。 还好这并不普遍,但是我却见过一个非常有能力的开发人员这么干过。要知道,真正重要的是方法的运行结果,而不是日志中都打印了什么,因为即使代码中有错误,测试也可能会通过。好了,说的很明白了。
后面3个问题都很容易规避。头2个问题则需要付出更多努力,但是会得到良好分离的代码。祝测试愉快!
相关推荐
单元测试通过运行代码检测出函数中错误,比如算法错误、接口问题等;集成测试则在单元测试的基础上验证单元之间接口的正确性。基于越早发现bug开发成本越低的原则,在进行代码功能验证的过程中,按照V流程右半部分先...
单元测试( Unit Test ,模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通过编写单元测试可以在编码 阶段发现程序编码错误,甚至是程序设计错误。 单元测试不但可以...
php的单元测试 再好的程序员也会犯错.程序员的好坏区别在于,好的程序员尽可能早地利用测试检测错误所在。越早测试,发现错误的机会越大,发现和修正的代价就越小。...这些可运行的代码片断称为单元测试。
通过单元测试,开发人员和测试人员可以快速查找 C#、Visual Basic 和 C++ 项目中各个类的方法中的逻辑错误。 单元测试工具包括: 测试资源管理器 — 可在“测试资源管理器”中运行单元测试并查看其结果 。 可以使用...
本文介绍了单元测试(1 模块接口测试;2 模块局部数据结构测试;3模块中所有独立执行通路测试 ;4 模块的各条错误处理通路测试;5 模块边界条件测试。)中应该注意的重点
【软件测试】: 单元测试:模块接口、局部数据结构、路径、边界条件、错误处理、代码书写规范.doc
黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。 白盒测试:已知产品的内部工作过程,可以通过测试证明每...
雨田单元测试系统是一款专业国产测试软件。软件的主要功能是对c文件进行单元测试和集成测试。软件以被测单元为纽带,可以...5 解决路径搜索算法中存在的处理循环的错误 6 更新了continue数据 雨田单元测试系统截图
在V 模型开发中,Tessy 主要应用在单元测试和集成测试阶段 单元测试通过运行代码检测出函数中错误,比如算法错误、接口问题
浅谈对单元测试的五个错误认识软件测试错误1:我们已经在做单元测试每个人对“单元测试”都有不同的认识,不过大多数业界专家普遍认为,单元测试应该是测试应用程序的基础组成部分,即代码单元。换句话说,这是API...
(2)一个程序单元或模块的功能是否会对另一个程序单元或模块的功能产生不利影响。 (3)根据计算精度的要求,单个程序模块的误差积累起来,是否仍能够达到要求的技术指标。 (4)程序单元或模块之间的接口测试。把...
子系统名:单元测试实例 ...2.开发人员根据开发组长所填写的第二个sheet的内容设计单元测试用例,即,完成该sheet蓝色区域的填写。 3.开发人员执行测试用例,并执行过程中填写该sheet的紫色区域。
**JUnit单元测试**是一种用于Java编程语言的单元测试框架,它可以帮助开发者编写和运行可重复的自动化测试,以验证代码中的各个单元(通常是一个类或方法)是否按照预期工作。单元测试是软件开发中的一个重要环节,...
通常来说,程式设计师每修改一次程式就会进行最少一次单元测试,在编写程式的过程中前后很可能要进行多次单元测试,以证实程式达到 软件规格书 要求的工作目标,没有 程序错误 ;虽然单元测试不是必须的,但也不坏...
C++Test是一个C/C++单元测试工具,自动测试任何C/C++类、函数或部件,而不需要您...通过将C++Test集成到开发过程中,您能够有效地防止软件错误,提高代码的稳定性,并自动化单元测试技术(这是极端编程过程的基础)。
junit单元测试测试是测试部门的责任,我的责任应该关注在写代码上; 测试不是一种技术工作,毫无乐趣可言,请不要骚扰我。我可是一个了不起的SSH程序员 我们有测试人员,有集成/系统/确认测试,他们迟早会发现我的...
软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量。JUnit是一个Java语言的单元测试框架
三年级上册英语第一单元测试卷典型错误例题.docx
当程序编好以后,将它录制在媒体上,或者直接由终端键盘输入到机中进行调试。测试的相对复杂性和所发现的错误受到单元测试所限定的范围的限制。
这个代码实现了一个简单的登录验证系统的单元测试。首先定义了一个LoginTest类,其中包含了两个测试方法testValidLogin和testInvalidLogin。在testValidLogin方法中创建了一个User对象,并调用其authenticate方法...