1 / 30

写 好测试

写 好测试. 吴大瑞. 写 好测试. 1. 为什么要写测试. 什么时候开始写测试. 2. 要对哪些代码进行测试. 3. “坏”的测试有哪些特点. 4. 怎样写出好的测试. 5. 不写测试的理由. 没有时间写单元测试。 单元测试的价值不高,完全是浪费时间。 业务逻辑比较简单,不值得编写单元测试。 不知道怎么编写单元测试。 老大没有要求,所以不写。 前期写,到后期就失控了。 我不想抢了 QA 的饭碗。 ……. 我讨厌 写测试. 软件. 一个 bug 被隐藏的时间越长,修复这个 bug 的代价就越大。. 写测试的好处. 写测试的好处.

rana-dillon
Download Presentation

写 好测试

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 写好测试 吴大瑞

  2. 写好测试 1 为什么要写测试 什么时候开始写测试 2 要对哪些代码进行测试 3 “坏”的测试有哪些特点 4 怎样写出好的测试 5

  3. 不写测试的理由 • 没有时间写单元测试。 • 单元测试的价值不高,完全是浪费时间。 • 业务逻辑比较简单,不值得编写单元测试。 • 不知道怎么编写单元测试。 • 老大没有要求,所以不写。 • 前期写,到后期就失控了。 • 我不想抢了QA的饭碗。 • …… 我讨厌 写测试

  4. 软件 一个bug被隐藏的时间越长,修复这个bug的代价就越大。 写测试的好处

  5. 写测试的好处 • 合格产品必须检验 • 调试和集成的痛苦 后期的调试 • 紧急发布 前期的编码

  6. 写测试的好处 这些程序都干了什么滴! 什么乱七八糟的! 如果我们有很多健康的测试,是不是有助于其他人呢?

  7. 写测试的好处 • 单元测试可以用来发现bug?

  8. 写测试的好处 起到了第一层防护网作用 保证组件是符合设计目标的 为重构打下良好的基础

  9. 要测哪些东西 • Service (AO BO) • DAO • Action(控制层) • WEB (UI)

  10. TDD模式 • 边写边测 • 后期补写 什么时候写测试 TDD 是一种开发实践,与测试技能无关。 补充测试不是一个长久的策略。 为每个可能的bug写个重现的case,然后修复它。

  11. 简单例子 Arrange 清单列表是空的 创建货物清单,输入产品的单价、数量、折扣、计算总价。 Action 验证清单的正确性 Assert

  12. AAA : Arrange Action Assert Given When Then

  13. 坏测试的模样

  14. 坏测试的气味 • 测试代码冗长,晦涩难懂。 • 测试失败的信息不够明确,需要太多的debug才能定位。 • 测试需要人工的干预(比如数据准备,改变条件等)。 • 整个测试没有验证点,即使代码抛出了异常,测试还是通过的。

  15. 什么是好的测试

  16. 坏测试的气味 • 贪心的测试,妄图一个case搞定世界。 • 测试代码的意图不明确,次要的信息太多了。 • 准备的数据太复杂,企图为所有的测试case服务。

  17. 坏测试的气味 • 变化无常的测试 一会儿通过,一会儿通不过。 • 牵一发动全身的测试 一点点代码的改变,导致大量的测试失败。

  18. 坏测试的气味 • 蜗牛的速度 • 测试代码中有条件分支(if-else)

  19. 什么是好的测试 因为小巧 • 所以简单

  20. 最最重要的 打好奠基,写好业务代码 如何写好测试

  21. 如何写好测试 • 命名要规范,且命名要反映你的意图 Class → ClassTest → ClassTest_SpecialPurpose methodA → testMethodA → testMethodA_SpecailPurpose → testMethodA_测试意图说明 methodB → …… 建议可以使用 moreunit 这个eclipse插件 ctrl + j 创建测试类或跳转到测试类 ctrl + u 创建测试方法或跳转到对应方法

  22. 如何写好测试 • 目录的组织要规范 • 测试代码应该和业务代码在一起? 我们公司的目录结构 src/java /java.test Maven的目录结构 src/main/java /resources /test/java /resrouces

  23. 如何写好测试 • 要及时将测试代码维护起来。 提交到svn的代码必须是健康的 持续测试 发现错误,及时维护 (小洞不补,大洞叫苦)

  24. 如何写好测试 • 善用mock 既不忌讳,也不滥用。

  25. 如何写好测试 • 善用断言 • 行为测试/状态测试 • AAA (输入/输出)

  26. 如何写好测试 如果你的代码一点变化,引起了大量测试失败? 如果你的代码已经发生变化,但却没有测试为此“下台”?

  27. 如何写好测试 • 测试要独立,换言之,就是B测试不要依赖A测试的结果。 • 保持适当的潮湿(un DRYness) • 不要吹毛求疵 • 乐观/悲观路径的测试。

  28. 总结 • 不好的测试也是一种灾难。 • 单元测试只是一种手段,要明白它能干什么,不能干什么。 • 不要太过于相信覆盖率。

  29. 测试模式 http://xunitpatterns.com/ 测试反模式 http://tdd-antipatterns.net/index.php?title=Main_Page 参考资料

  30. Q & A

More Related