这本书大概是07, 08年的时候出来的吧, 当印成中文版的时候已经是09年的事儿了. 而我却在10年才开始翻它.
虽然作者是TestNG开源测试框架的发起人和主要贡献者, 但是作者写这本书的目的貌似并没有鼓吹让大家用他的这个框架来做单元测试, 很大的篇幅在讲一些与测试相关的事儿. 因为很多的场景本人并没有遇到, 或者有些问题可能对本人来说不是问题, 比如测试需要依赖执行顺序, 需要再次运行一个测试套件执行之后失败的测试用例, 一些并发测试等.
另外TestGN的很多很先进的思想已经在最新版的JUnit中有所体现, 比如注解, DataProvider等, 因此看的比较粗糙一些.
我觉得作者在某些方面的观念是非常新意的, 比如在敏捷当道的今天.作者对敏捷的某些"极端做法"提出了质疑.
对于测试覆盖率, 作者认为测试覆盖率并不是越高越好, 应该有一定的限度, 而决定覆盖率的因素与时间期限有关, 并且遵循8/2原则.
对于模拟和桩这一节, 让我明白了二者的区别, 而市面上貌似对着两个概念都混淆了, 连极为流行的spring也不例外, 比如spring-mock这个包里面更确切的说应该是stub(桩)的东西, 简单来说模拟真实对象的类就是stub, 用来临时模拟真实对象的部分行为的应该是mock, 比如easymock, jmock.都是用来录制期望真实对象的行为并在测试的过程中加以回放, 并在执行测试的结束加以检查.
作者对TDD的两点反对意见:
它注重微观设计超过宏观设计
它在实践中难以应用.
在说到TDD难以使用, 作者毫不客气的说到, 市面上列举的TDD的case都是一些小儿科的应用: 比如一个保龄球记分牌(bob大叔的敏捷实践中的例子), money例子(kent back的测试驱动开发中的例子)等等.
作者认为TDD对这些例子来说工作的很好, 这一点没有疑问, 而没有告诉程序员如何对非常复杂的代码进行测试驱动开发.
对于TestNG这样的开源测试框架也只有10~15%的测试是以TDD的方式来编写的.
用TDD方式编写的代码不一定就比"后测试"提交的代码具有更好的品质, 采用TDD方式 就一定能得到更好的设计也不一定.
作者对"如果编写了测试, 就不在需要调试"的观点进行了驳斥, 这个主要是针对某些人通过在代码中植入System.out.print()的方式来避免使用调试器的做法. 本人也觉得想象中的代码执行逻辑有时候与代码实际的执行逻辑之间有时候并不一致, 这时就应该祭起调试器这把屠龙大刀.
对xp作者也没有手下留情, 认为沉迷于xp的都是一些咨询公司用来赚取咨询费的伎俩, 认为对于结对编程的1+1>2的效果仅限于初学者, 而对于专家+专家抑或专家+菜鸟的结对未必会达到理想的效果
最后作者道出的是一个老生常谈的道理: 测试应该时常写, 应该作为开发的一部分, 是一个持续渐进的过程, 当达到一定阶段的时候, 测试的威力就会逐渐显现.
虽然我们没有采用tdd, 我们的结对方式也很山寨(开发人员主要写代码, 配备的测试人员主要写测试, 人员配备比例3:1), 但是我们的测试已经对整个代码形成了一道强有力的防护网, 一些改动带来的bug会很容易被揪出来. 对自己的重构也越来越有信心, 也许这就是所谓的勇气吧.
分享到:
相关推荐
- **测试工具**:JUnit、TestNG 等工具用于进行单元测试和集成测试。 - **项目库**:Maven Central Repository 等仓库提供大量的 Java 项目依赖。 - **论坛与文档**:Stack Overflow、Oracle Java 文档等资源对于...
Spring Framework 的测试框架知识点 涵盖了 Unit Testing、Mock Objects、Environment、JNDI、Servlet API 和 Spring Web Reactive 等方面,提供了许多测试相关的功能和技术,可以帮助开发者更好地测试 Spring ...
"javaNote 笔记"是一个集中的资源,旨在帮助开发者系统地复习和深入理解Java的核心概念和技术。这份笔记可能涵盖了以下关键知识点: 1. **基础语法**:包括数据类型(基本类型与引用类型)、变量、运算符、流程控制...
总结来说,Selenium WebDriver是自动化Web应用测试的强大工具,通过Java和TestNG,我们可以编写出结构清晰、易于维护的自动化测试脚本,实现对不同浏览器和平台的测试覆盖。在实际项目中,正确配置环境和理解其工作...
除此之外,调试技巧、性能优化、日志记录和测试框架(JUnit、TestNG)的运用也是重要的学习内容。 文件"da"可能是资料的目录或者压缩包中的一个组件,其具体内容无法直接得知,但通常在Java培训资料中,这样的文件...
- **Java EE** 提供了一系列服务、API 和协议,如 JSP、Servlet、Enterprise JavaBeans (EJB)、Java Remote Method Invocation (RMI) 等,这些技术共同构成了开发分布式、多层式、组件化和基于 Web 的应用程序的基础...
9. **Java新特性**:随着Java版本的更新,新的语言特性和API会被引入,如Lambda表达式、Stream API、Optional类等,仓库可能包含对这些新特性的介绍和应用实例。 10. **学习笔记与思考**:这部分可能是作者在学习...
通过这份资料,我们可以深入理解和掌握Java编程的核心概念、技术和最佳实践。 首先,从标题“pracdemo:书籍阅读笔记和演示”我们可以推测,这是一个学习资料集合,可能包括作者在阅读Java相关书籍时的笔记整理,...
6. **扩展与集成**:Selenium可以与其他工具和技术结合使用,如TestNG或JUnit进行测试框架搭建,使用Mockito进行模拟对象测试,或是与BDD(行为驱动开发)工具如Cucumber配合,提高测试的可读性和可维护性。...
- **Test**:测试模块,提供支持Junit和TestNG的测试功能。 #### 4. 现代化的Java开发框架 - **Spring Boot**:Spring Boot 是基于Spring框架的一个子项目,旨在简化Spring应用的初始搭建以及开发过程。Spring ...
JUnit或者TestNG可能是用来编写这些测试的工具,通过测试可以了解代码的预期行为,并确保修改不会引入新的错误。 2. "javaT":可能包含的是Java相关的类,比如实体类(Entities)、服务接口(Services)和实现类...
iNotes的开发很可能利用了Java的面向对象编程特性,包括类、对象、封装、继承和多态等概念,从而实现功能丰富的笔记系统。 在iNotes的主要功能中,我们可以推测它可能包含了以下核心模块: 1. **用户界面**:使用...
总的来说,"code_practice_2021"是一个涵盖广泛Java编程实践的项目,不仅涉及基本的语法和概念,还包括了现代Java开发中的高级主题和技术。通过这个项目,开发者可以提升自己的编程技能,了解最新的Java发展动态,并...
2. **自动化框架**:介绍Java支持的自动化测试框架,如JUnit、TestNG、Spock等,以及它们的使用方法和优势。 3. **Web自动化**:讲解如何使用Selenium WebDriver用Java进行Web应用程序的自动化测试,包括元素定位、...
10. **单元测试与集成测试**:JUnit和Mockito等工具是进行Java单元测试的标准选择,而Selenium、TestNG等用于集成测试。了解如何编写和执行测试用例对于保证代码质量至关重要。 11. **Java 8及以后的更新**:从...
【标签】"Java"指明了这次活动的主要技术焦点是Java语言,这是一门广泛应用于服务器端开发、移动应用开发(尤其是Android)和大型企业级系统的高级编程语言。Java以其“一次编写,到处运行”的特性闻名,具有丰富的...
7. **Java测试**:JUnit、TestNG等单元测试框架,以及Mockito等模拟工具,对于保证代码质量至关重要。 由于没有具体的研讨会内容,我们无法详细讨论该课程涉及的具体主题。不过,以上内容提供了一个全面的Java编程...
6. **IO与NIO**:Java的输入/输出系统(IO)和新输入/输出系统(NIO)是处理数据传输的关键,研讨会可能涵盖流的概念、缓冲区操作以及通道和选择器的使用。 7. **反射机制**:Java反射允许程序在运行时动态地获取类...