`

《单元测试之道Java版——使用JUnit》读书笔记

阅读更多

这个可能是到目前为止我看到的最薄的技术书了.一本专门讲用junit做测试的书籍, 但是又不是纯技术的书籍, 里面没有介绍junit如何实现, 也没有大篇幅的介绍如何使用junit, 或者介绍junit的一些高级用法, 这些统统的没有, 那么这本书都讲的什么呢, 它讲了做单元测试的一些原则, 单元测试测什么, 什么样的单元测试才是一个好测试.
这本书的一个缺点就是, 当前junit都4.x后了, 结果本书还在拿3.x说事儿, 有些不爽. 不过瑕不掩瑜. 因为很多内容(比如原则)都是超越于具体的junit版本的.很多东东拿到最新的版本下依然适用.

对于每个新写的函数, 在其他代码使用这个函数并对它形成依赖之前, 都要先做测试

一个单元测试是用于判断某个特定条件或场景下某个特定函数的行为.

执行单元测试, 是为了证明某段代码的行为确实和开发者所期望的一致

在测试某段代码是否与你期望的一致, 你需要确认: 在任何情况下, 这段代码是否都和你期望的一致.

测试哪些内容:Right-BICEP
Right:结果是否正确:
B:是否所有的边界条件都是正确的?
I:能查一下反向关联吗?
C:能用其他手段交叉检查一下结果么?
E:你是否可以强制错误条件发生?
P:是否满足性能要求?
上面说的感觉是鸟语, 可以无视:)

好的测试应该具有的品质
自动化
彻底的
可重复
测试不能依赖于不受力直接控制的任何外部因素
独立的
测试应该是间接而且精炼的, 这意味着每个测试都应该具有很强的针对性, 并且独立于环境和其他的测试
在编写测试时, 确保你一次只测试了一样的东西
一个测试函数应该专注于产品代码中的一个函数, 或者组合起来并共同提供某一个特性的一组函数
理想情况下, 你能够在潜在的bug和测试代码之间有可追踪的对应关系. 换句话说, 当一个测试失败了, 应该立刻就可以知道代码中潜在的bug位置
"独立的"意味着没有测试依赖于任何其他的测试; 你应该可以任何时候以任何顺序运行任何单个测试.
专业的
单元测试代码应该真实的, 甚至比里卖给客户的代码还要专业, 至少必须和产品代码相同的水准来编写和维护测试代码. 对于测试代码中相同的内容, 应该毫不犹豫的加以封装重用.
测试代码应该和产品代码一样多

如何修正bug
  • 验明bug
  • 编写一个将失败的测试来正品bug的存在
  • 修正代码, 让测试通过
  • 验证所有的测试依然可以通过(即你在修正bug的同时没有破坏其他测试)


应该对每次发现的bug进行总结, 以避免在项目中犯同样的错误.而不仅仅只是为修复bug而做测试.

对遗留系统实施单元测试
对于已经存在的大量代码, 你可以选择为可测试的一切代码系统的添加大量的测试. 但这并不是最好的方法, 最有效的做法是只给最有可能出问题的代码进行测试, 这样才可以通过最有效的投入获得最大的回报.

测试设计
如果测试代码写的非常丑陋, 甚至难于理解的话, 那么你就应该把这种情况看成一种征兆. 他暗示着你的设计可能需要修改, 改成一些设计, 知道让代码易于测试为止.

测试类的不变性
改善类设计的另一个方法是:定义和验证类的不变性, 这里的不变性可以举几个例子来加以说明, 比如索引必须大于或者等于0, 索引必须小于数组的长度. 银行账号的借贷必须平衡等等.

测试驱动设计
可以通过编写测试, 你现在需要把自己当成代码的用户, 而不是代码的实现者. 从这个角度来看, 你能够在接口如何被使用方面获得更多的体验, 从而更有机会来改善设计.
分享到:
评论

相关推荐

    ANT學習筆記(一)——ANT 結合JUNIT4學習DEMO

    在本篇学习笔记中,我们将探讨如何使用ANT与JUnit4结合,进行单元测试。 **ANT基础** 1. **安装与配置**:首先,你需要下载ANT的最新版本并添加到系统环境变量PATH中,这样可以在命令行中直接调用ant命令。 2. **...

    JAVA 私塾笔记整理——反射机制(Reflection)

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性...通过阅读"JAVA私塾笔记整理——反射机制(Reflection)",你可以更全面地理解和掌握这一关键特性。

    《移动应用软件测试项目教程》读书笔记模板.pptx

    任务三: Android 单元测试框架——Instrumentation,学习如何使用 Instrumentation 框架来测试 Android 应用。 项目五:基于 Robotium 的集成测试 学习目标:掌握基于 Robotium 的集成测试的方法和工具。 任务一...

    java相关资源2

    它们涵盖了Java开发中的重要框架和技术,如Struts、Spring、Hibernate、SSH整合、Spring AOP与MyBatis动态SQL、笔记以及Spring的IoC和AOP原理,还有JUnit单元测试。现在,我们将逐一解析这些知识点。 1. **Struts**...

    Mario源代码及笔记

    6. **调试技巧**:开发者可能会分享他们在调试代码时使用的工具和方法,如使用Junit进行单元测试,或者使用IDE的调试功能定位问题。 7. **优化技巧**:为了保证游戏流畅运行,开发者可能会讨论性能优化,例如减少...

    Android源码——小米便签源码.zip

    9. **测试与调试**:源码中可能包含单元测试和UI测试,使用JUnit、Espresso等工具,这对于理解应用的测试策略和质量保证过程很有帮助。 10. **版本控制**:源代码很可能来自于Git仓库,通过查看提交历史,可以了解...

    托福资料(完整带Java后台)

    9. **单元测试**:JUnit是Java常用的单元测试框架,确保代码的质量和功能正确性。 10. **持续集成/持续部署(CI/CD)**:使用如Jenkins等工具实现自动化构建和部署,提高开发效率。 这份资料可能包含了上述各个领域...

    学习笔记

    可能包含的工具使用教程涵盖了版本控制工具(如Git)、集成开发环境(IDEs,如Eclipse、IntelliJ IDEA)、构建工具(如Maven、Gradle)、自动化测试框架(如JUnit、Selenium)等。了解并熟练使用这些工具可以极大地...

    simplenotebook

    《简单笔记本——深入探索Java编程实践》 "简单笔记本"(Simplenotebook)是一个基于Java编程语言的项目,其主要目标是提供一个简洁、易于使用的笔记本应用程序。这个项目虽然源于作者老师的教学实例,但开发者承诺...

    Spring學習筆記DEMO代碼(一)

    3. **测试用例**:为了确保代码的正确性,通常会包含JUnit测试用例,如`MyServiceTest.java`,这有助于验证依赖注入是否正常工作。 4. **Maven或Gradle构建文件**:项目可能会使用Maven的`pom.xml`或Gradle的`build...

    COMP107x:Hello World-Android应用程序

    11. **单元测试和UI测试**:使用JUnit和Espresso进行应用的自动化测试。 通过这门课程,学生将能够构建一个简单的Android应用,理解Android应用的基本架构,并为进一步深入学习和开发更复杂的Android应用打下坚实的...

    树屋

    4. **测试与验证**:可能包括自动化测试文件(如JUnit测试、Mocha/Chai测试),用于检查学员的代码是否符合预期。 5. **笔记与文档**:PDF、Markdown或其他格式的学习笔记,可能包括关键概念解释、术语定义等。 6. *...

Global site tag (gtag.js) - Google Analytics