05|TDD中的测试(1):状态验证为什么是主要的使用方式?

2022-03-22 徐昊
《徐昊·TDD 项目实战 70 讲》
课程介绍


讲述:徐昊

时长:大小7.15M


你好,我是徐昊。从这节课开始我们来正式学习测试驱动开发(Test-Driven Development,TDD)。
通过前面四节课的演示,相信你对测试驱动开发已经有了一定的感性认识。测试作为整个流程的驱动力,无论是在开发还是重构过程中都起到了重要作用。我想你对这一点一定有了比较深刻的印象。那么从今天开始,我们就来学习如何编写测试。

测试的基本结构

无论使用什么样的测试框架,每个测试都由四个依次执行的阶段组成:初始化(SetUp)、执行测试(Exercise)、验证结果(Verify)和复原(Teardown)。如下图所示:
需要说明一下的是,测试上下文(Test Context)在很多文献中被称作测试夹具(Test Fixture)。
夹具是个隐喻,是木工或者其他制...

展开全文
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。

精选留言

  • asusual
    2022-04-03
    为什么 TDD 中主要使用状态验证来验证测试的结果? TDD的主要核心在于tasking, tasking后的任务列表一定是一个具体且可验证的的行为。 e.g 用户可以使用 用户名: some-user 用户密码:some-password 成功登录系统 输入确定,输出必然确定 我们只需要关心测试输入与输出(黑盒测试),也就是说不需要关心如何实现 一旦我们切换到行为验证(相当于白盒测试),关注点从验证输入和输出结果转换到验证具体实现行为 假设我们需要切换到另外一种实现行为,单元测试也需要重新修改, 有点像“实现驱动测试”,最终导致变更成本提高
    展开
    
    
  • escray
    2022-04-02
    终于追到了第五讲,之前用 RSpec 写过 Ruby 的单元测试,但是没有感觉的状态验证和行为验证的具体差别,估计还是代码写的太少的缘故。 这一讲其实是前面几讲中相对轻松的一篇,前面课程的视频里面有不少代码示例,我努力完成了一部分,主要是因为自己对于 Java 实在是不够熟练,练习 TDD 的过程中顺便学习了一个 Java 编程。 同样把提供代码,希望能有帮助 https://github.com/escray/TDDCourse/tree/ch05 有点好奇的是,Java 的这些新特性在日常开发中使用的多么?似乎很多项目还是建立在 Java 1.8 的基础上的,虽然现在已经是 Java 18 了。
    展开
    
    
  • aoe
    2022-03-27
    来自学习群的分享 有哪些状态验证技术推荐吗? - 做各种fake mountainbike,mock,in men do, test container - 目的就是尽量少做行为验证 - **所谓测试策略 就是在保证有效性的同时 尽可能降低测试成本** - 维持测试有效性 有个最小成本 - 小过这个 测试就无效了 或者不足以支撑长期演化(重构) - 所以你没办法一直缩短测试时间 - 这也是我们讲的 始终使用状态验证 防止测试失效 - 在状态验证里 通过stub 偷换fake 降低成本
    展开
    
    
  • aoe
    2022-03-26
    推荐一个比 Selenium 更好用的 Selenide(我没用过,但看书上介绍很厉害) 1. 基于 Selenium 的项目 2. 提供了优良的测试编写语法,提高了测试的可读性 3. 它将 WebDriver 和配置隐藏,同时提供了极大的定制空间 4. PhantomJS 是一款无界面浏览器(headless browser),不使用任何 UI 就能工作 摘自《Java 测试驱动开发》2.9 用户界面测试;7.4.3 Selenium 和 Selenide 笔记链接:http://wyyl1.com/post/18/02/
    展开
    
    