序
前言
致谢
第1章 起步
1.1 超越JUnit 3
1.2 JUnit 4
1.3 针对可测试性而设计
1.4 TestNG
1.5 本章小结
第2章 测试设计模式
2.1 针对失败而测试
2.2 工厂
2.3 数据驱动测试
2.4 异步测试
2.5 测试多线程代码
2.6 性能测试
2.7 模拟和桩
2.8 依赖的测试
2.9 继承和annotation范围
2.10 测试分组
2.11 代码覆盖率
2.12 本章小结
第3章 企业级测试
3.1 典型企业级场景
3.2 一个具体例子
3.3 测试实现
3.4 探索竞争消费者模式
3.5 重构的作用
3.6 本章小结
第4章 Java EE测试
4.1 容器内测试与容器外测试的对比
4.2 容器内测试
4.3 Java命名和目录接口(JNDI)
4.4 Java数据库连接(JDBC)
4.5 Java事务API(JTA)
4.6 Java消息服务(JMS)
4.7 Java持久API(JPA)
4.8 Enterprise JavaBeans 3.0(EJB3)
4.9 Java API for XML Web Services(JAX-WS)
4.10 Servlets
4.11 XML
4.12 本章小结
第5章 集成
5.1 Spring
5.2 Guice
5.3 DbUnit
5.4 HtmlUnit
5.5 Selenium
5.6 Swing UI测试
5.7 针对画图代码的测试
5.8 持续集成
5.9 本章小结
第6章 扩展TestNG
6.1 TestNG API
6.2 BeanShell
6.3 方法选择器
6.4 Annotation转换器
6.5 报告
6.6 编写自定义Annotation
6.7 本章小结
第7章 闲言碎语
7.1 动机
7.2 TestNG哲学
7.3 关注和提供异常
7.4 有状态的测试
7.5 测试驱动开发的缺点
7.6 测试私有方法
7.7 测试与封装
7.8 调试器的威力
7.9 记日志的最佳实践
7.10 时间的价值
7.11 本章小结
附录A IDE集成
附录B TestNG JavaDoc
附录C testng.xml
附录D 从JUnit迁移