• 1. 简化Java单元测试?2013/05/29
  • 2. 为什么要做单元测试?保证局部代码质量 改良项目代码整体结构 降低测试维护升级成本 适应频繁变化的需求 …
  • 3. 为何我们不(愿)写单元测试?为了完成编码任务,没有足够时间编写单元测试 不知道怎么写单元测试 代码已经很烂,没法下手 代码稍作修改,测试也要一并修改,太麻烦了 业务逻辑简单,不值得编写单元测试 项目没有要求,所以不写 …
  • 4. “我们”的困境?产品开发过程 拖、拖、拖! 产品发布前夕… 加班、加班、加班! 产品发布后… Bug、Bug、Bug!
  • 5. 单元测试的麻烦测试数据准备繁琐 new object set object field put key/value to map add element to list Mock的困境 mock private field/method mock static method partial mock
  • 6. 简单的比较Java Spock
  • 7. 为何选择Spock?容易学习(懂Java和Junit就行) 基于Groovy,和Java语法相近 简化了代码 详细的错误信息 开放: 单元测试,集成测试,行为驱动测试 优美的语法 强大的扩展 兼容JUnit 从许多优秀的测试工具借鉴
  • 8. 简化数据准备(Groovy)New object new Order(orderId: 12345, name: “Test”) Create List [“a”, “b”, “c”] Create Map [“orderId”: 12345, “name”: “Test”]
  • 9. Mock创建Mock Subscriber subscriber = Mock() 设置Mock期望的输入输出 subscriber.receive(_) >> "ok" 设置Mock方法的期望执行 2 * subscriber.receive("hello")
  • 10. MockPartial Mock def persister = Spy(MessagePersister) { isPersistable(_) >> true } 私有成员变量(Power of Groovy) object.privateFiled = Mock()
  • 11. 数据驱动
  • 12. 测试即文档用中文描述测试用例 def “将元素添加到栈中”() {…} 标签后的文字说明 given: “一个空的银行账户” // ... when: “向账户中存入$10” // ... then: “账户的余额是$10”
  • 13. 演示Create spock specification (spgwt) The power of where block (Data Driven) The failure show
  • 14. 参考文档Unit Testing Guidelines 我讨厌单元测试 程序员为什么不写单元测试 Why Spock Spock文档