课程介绍

课程来自于 徐昊·TDD 项目实战70讲

你将获得

洞见测试驱动开发的实质与全貌
40+ 小时视频,演绎架构设计新思路
3 个开发框架,搞定 TDD 的落地难题
靠谱程序员必备的任务分解基本功

课程介绍

提起 TDD,肯定会掀起一番互为对立的讨论。会 TDD 的人连声称赞叫好,认为 TDD 显著提高了编码效率,让自己工作起来更有安全感。而没实践过 TDD 的人,还在困惑这是不是天方夜谭,因为没法想象为什么需要这样的方式来开发:

为什么要开发人员来写测试?难道开发人员写了测试,测试人员就不用再测了嘛?
又要写测试,又要写生产代码,效率是不是太低了?
不写测试我也能写出可以工作的软件,那么写测试能给我带来什么好处呢?
然而 TDD 并不是关于“怎么写测试”“怎么消除测试人员”“怎么让开发人员多干一份活”的编码技巧。它是以测试为里程碑点的工程化研发过程。同时将软件流程中无时无处不在的低效测试手段,用可重复的、高效的自动化测试来代替,从而获得更高的工程效能。

这才是隐藏在 TDD 工程实践背后的核心逻辑。

TDD 作为敏捷开发的重要基石,就像脚手架,为代码提供保护网。它的核心在于严格规定开发节奏,一次把需求理清,一次做对、消除返工,不用调试就能获得反馈。它最直接的收益,就是帮助你提高开发功能的效能。而最后节省出的时间,也将远远大于编写测试代码而产生的工作时间总和。

不过,学习 TDD 肯定需要花费一番力气,很多信服于 TDD 理念而自发实践的人也会被各种问题所困扰。而最佳的学习路径,就是跟一个真正会 TDD 的程序员一起写代码。

为此,我们特别邀请了 Thoughtworks 中国区 CTO 徐昊老师,来帮你搞定 TDD 的落地难题。他作为国内第一批 TDD 的践行者,是国内目前为数不多的熟练掌握 TDD 技能的大师级程序员。

他会先演示一个简单的例子,让你眼见为实,对 TDD 形成一个感性、直观的认识。同时,他也会对 TDD 抽丝剥茧,消除你对单元测试的疑惑,帮你认识到 TDD 中测试的实质与全貌。接下来的重点是,他会带着你在复杂场景下进行实战项目的练习,帮你吃透 TDD 实战中的细节。

文件目录

01-开篇词

开篇词丨为什么TDD是当前最具工程效能的研发流程?..pdf

开篇词丨为什么TDD是当前最具工程效能的研发流程?..html

开篇词丨为什么TDD是当前最具工程效能的研发流程?..m4a

课前必读丨20年前的“老古董”技术,为什么还值得开个课?..m4a

课前必读丨20年前的“老古董”技术,为什么还值得开个课?..html

课前必读丨20年前的“老古董”技术,为什么还值得开个课?..pdf

02-实战项目一:命令行参数解析

01丨TDD演示(1):任务分解法与整体工作流程..html

01丨TDD演示(1):任务分解法与整体工作流程..m4a

01丨TDD演示(1):任务分解法与整体工作流程..pdf

02丨TDD演示(2):识别坏味道与代码重构..html

02丨TDD演示(2):识别坏味道与代码重构..pdf

02丨TDD演示(2):识别坏味道与代码重构..m4a

03丨TDD演示(3):按测试策略重组测试..mp4

03丨TDD演示(3):按测试策略重组测试..html

03丨TDD演示(3):按测试策略重组测试..pdf

03丨TDD演示(3):按测试策略重组测试..m4a

04丨TDD演示(4):实现对于列表参数的支持(2)..mp4

04丨TDD演示(4):实现对于列表参数的支持..html

04丨TDD演示(4):实现对于列表参数的支持..mp4

04丨TDD演示(4):实现对于列表参数的支持..pdf

04丨TDD演示(4):实现对于列表参数的支持..m4a

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

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

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

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

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

06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?(3)..mp4

06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?..mp4

06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?..pdf

06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?..html

06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?(2)..mp4

06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?..m4a

07丨TDD中的测试(3):集成测试还是单元测试?..mp4

07丨TDD中的测试(3):集成测试还是单元测试?..m4a

07丨TDD中的测试(3):集成测试还是单元测试?..html

07丨TDD中的测试(3):集成测试还是单元测试?..pdf

08丨TDD中的驱动(1):驱动的极限是什么?..pdf

08丨TDD中的驱动(1):驱动的极限是什么?..m4a

08丨TDD中的驱动(1):驱动的极限是什么?..html

08丨TDD中的驱动(1):驱动的极限是什么?(3)..mp4

08丨TDD中的驱动(1):驱动的极限是什么?..mp4

08丨TDD中的驱动(1):驱动的极限是什么?(2)..mp4

09丨TDD中的驱动(2):重构发挥了什么作用?..pdf

09丨TDD中的驱动(2):重构发挥了什么作用?..mp4

09丨TDD中的驱动(2):重构发挥了什么作用?..html

09丨TDD中的驱动(2):重构发挥了什么作用?..m4a

10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?(2)..mp4

10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?..m4a

10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?..html

10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?..pdf

10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?..mp4

11丨作为工程化方法的TDD:更低的成本与更高的效能..pdf

11丨作为工程化方法的TDD:更低的成本与更高的效能..html

11丨作为工程化方法的TDD:更低的成本与更高的效能..m4a

03-TDD首发·代码评点

代码评点01丨不同语言TDD的节奏有何不同?..m4a

代码评点01丨不同语言TDD的节奏有何不同?..html

代码评点01丨不同语言TDD的节奏有何不同?..pdf

代码评点01丨不同语言TDD的节奏有何不同?..mp4

代码评点01丨不同语言TDD的节奏有何不同?(2)..mp4

代码评点02丨什么是合适TDD的语言和IDE?..html

代码评点02丨什么是合适TDD的语言和IDE?..pdf

代码评点02丨什么是合适TDD的语言和IDE?..m4a

代码评点02丨什么是合适TDD的语言和IDE?..mp4

04-实战项目二丨RESTful开发框架:依赖注入容器

12丨实战中的TDD:RESTfulAPI的开发框架..m4a

12丨实战中的TDD:RESTfulAPI的开发框架..html

12丨实战中的TDD:RESTfulAPI的开发框架..mp4

12丨实战中的TDD:RESTfulAPI的开发框架..pdf

12丨实战中的TDD:RESTfulAPI的开发框架(2)..mp4

13丨DIContainer(1):如何实现基本的DI容器结构?..pdf

13丨DIContainer(1):如何实现基本的DI容器结构?..html

13丨DIContainer(1):如何实现基本的DI容器结构?..m4a

13丨DIContainer(1):如何实现基本的DI容器结构?..mp4

14丨DIContainer(2):如何通过SadPath为容器增加功能?(2)..mp4

14丨DIContainer(2):如何通过SadPath为容器增加功能?..pdf

14丨DIContainer(2):如何通过SadPath为容器增加功能?..m4a

14丨DIContainer(2):如何通过SadPath为容器增加功能?..html

14丨DIContainer(2):如何通过SadPath为容器增加功能?..mp4

15丨DIContainer(3):如何重构已有的代码?..html

15丨DIContainer(3):如何重构已有的代码?..pdf

15丨DIContainer(3):如何重构已有的代码?..mp4

15丨DIContainer(3):如何重构已有的代码?..m4a

16丨DIContainer(4):如何实现对循环依赖的处理?..m4a

16丨DIContainer(4):如何实现对循环依赖的处理?..html

16丨DIContainer(4):如何实现对循环依赖的处理?..mp4

16丨DIContainer(4):如何实现对循环依赖的处理?..pdf

17丨DIContainer(5):API接口该怎么设计?..m4a

17丨DIContainer(5):API接口该怎么设计?..pdf

17丨DIContainer(5):API接口该怎么设计?..mp4

17丨DIContainer(5):API接口该怎么设计?..html

18丨DIContainer(6):如何实现循环依赖的检查?..mp4

18丨DIContainer(6):如何实现循环依赖的检查?..pdf

18丨DIContainer(6):如何实现循环依赖的检查?..m4a

18丨DIContainer(6):如何实现循环依赖的检查?..html

19丨DIContainer(7):如何实现FieldInjection部分的功能?..mp4

19丨DIContainer(7):如何实现FieldInjection部分的功能?..pdf

19丨DIContainer(7):如何实现FieldInjection部分的功能?..m4a

19丨DIContainer(7):如何实现FieldInjection部分的功能?..html

20丨DIContainer(8):如何实现MethodInjection部分的功能?..html

20丨DIContainer(8):如何实现MethodInjection部分的功能?..mp4

20丨DIContainer(8):如何实现MethodInjection部分的功能?..pdf

20丨DIContainer(8):如何实现MethodInjection部分的功能?..m4a

21丨DIContainer(9):怎样重构测试代码?..pdf

21丨DIContainer(9):怎样重构测试代码?..html

21丨DIContainer(9):怎样重构测试代码?..m4a

21丨DIContainer(9):怎样重构测试代码?..mp4

22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?..pdf

22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?..html

22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?..mp4

22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?..m4a

23丨DIContainer(11):如何对ContainerTest进行文档化改造?..pdf

23丨DIContainer(11):如何对ContainerTest进行文档化改造?..html

23丨DI Container(11):如何对ContainerTest进行文档化改造?..mp4

23丨DIContainer(11):如何对ContainerTest进行文档化改造?..m4a

24丨DIContainer(12):如何增补功能?..pdf

24丨DI Container(12):如何增补功能?..mp4

24丨DIContainer(12):如何增补功能?..m4a

24丨DIContainer(12):如何增补功能?..html

25丨DIContainer(13):任务上的遗漏该怎么处理?..html

25丨DIContainer(13):任务上的遗漏该怎么处理?..pdf

25丨DIContainer(13):任务上的遗漏该怎么处理?..m4a

25丨DI Container(13):任务上的遗漏该怎么处理?..mp4

26丨DIContainer(14):如何重构对Type类型判断的逻辑?..pdf

26丨DIContainer(14):如何重构对Type类型判断的逻辑?..html

26丨DIContainer(14):如何重构对Type类型判断的逻辑?..m4a

26丨DI Container(14):如何重构对Type类型判断的逻辑?..mp4

27丨DIContainer(15):如何封装类型判断逻辑?..m4a

27丨DI Container(15):如何封装类型判断逻辑?..mp4

27丨DIContainer(15):如何封装类型判断逻辑?..html

27丨DIContainer(15):如何封装类型判断逻辑?..pdf

28丨DIContainer(16):行为封装会对测试产生什么影响?

28丨DIContainer(16):行为封装会对测试产生什么影响?..pdf

28丨DIContainer(16):行为封装会对测试产生什么影响?..html

28丨DIContainer(16):行为封装会对测试产生什么影响?..m4a

28丨DI Container(16):行为封装会对测试产生什么影响?..mp4

29丨DI Container(17):如何重构ContextConfig内部的实现?

29丨DIContainer(17):如何重构ContextConfig内部的实现?..html

29丨DIContainer(17):如何重构ContextConfig内部的实现?..PDF

29丨DI Container(17):如何重构ContextConfig内部的实现?..mp4

29丨DIContainer(17):如何重构ContextConfig内部的实现?..m4a

30丨DI Container(18):如何增补依赖缺失和循环依赖的测试?

30丨DIContainer(18):如何增补依赖缺失和循环依赖的测试?..PDF

30丨DI Container(18):如何增补依赖缺失和循环依赖的测试?..mp4

30丨DIContainer(18):如何增补依赖缺失和循环依赖的测试?..html

30丨DIContainer(18):如何增补依赖缺失和循环依赖的测试?..m4a

31丨DI Container(19):Qualifier部分的功能要如何完成?

31丨DIContainer(19):Qualifier部分的功能要如何完成?..html

31丨DIContainer(19):Qualifier部分的功能要如何完成?..PDF

31丨DIContainer(19):Qualifier部分的功能要如何完成?..m4a

31丨DI Container(19):Qualifier部分的功能要如何完成?..mp4

32丨DI Container(20):如何对代码和测试进行重构?

32丨DI Container(20):如何对代码和测试进行重构?..mp4

32丨DIContainer(20):如何对代码和测试进行重构?..PDF

32丨DIContainer(20):如何对代码和测试进行重构?..m4a

32丨DIContainer(20):如何对代码和测试进行重构?..html

33丨DI Container(21):如何处理Singleton生命周期部分的功能?

33丨DIContainer(21):如何处理Singleton生命周期部分的功能?..m4a

33丨DIContainer(21):如何处理Singleton生命周期部分的功能?..PDF

33丨DI Container(21):如何处理Singleton生命周期部分的功能?..mp4

33丨DIContainer(21):如何处理Singleton生命周期部分的功能?..html

34丨DI Container(22):如何对Bind的逻辑进行重构?

34丨DIContainer(22):如何对Bind的逻辑进行重构?..PDF

34丨DI Container(22):如何对Bind的逻辑进行重构?..mp4

34丨DIContainer(22):如何对Bind的逻辑进行重构?..html

34丨DIContainer(22):如何对Bind的逻辑进行重构?..m4a

35丨DIContainer(23):项目回顾与总结

35丨DIContainer(23):项目回顾与总结..html

35丨DIContainer(23):项目回顾与总结..m4a

35丨DI Container(23):项目回顾与总结..mp4

35丨DIContainer(23):项目回顾与总结..pdf

05-实战项目三|RESTfulWebServices

36丨实战中的TDD:RESTfulWebServices

36丨实战中的TDD:RESTfulWebServices(2)..mp4

36丨实战中的TDD:RESTfulWebServices..m4a

36丨实战中的TDD:RESTfulWebServices..pdf

36丨实战中的TDD:RESTfulWebServices..html

36丨实战中的TDD:RESTfulWebServices..mp4

37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互

37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互..html

37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互..m4a

37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互..pdf

37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互..mp4

38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?

38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?..html

38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?..pdf

38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?..mp4

38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?..m4a

39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序

39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序..pdf

39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序(1)..mp4

39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序..mp4

39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序..m4a

39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序..html

40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?

40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?..pdf

40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?..m4a

40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?..mp4

40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?..html

41丨RESTfulWebServices(5):如何通过对数据测试的管理来凸显意图?

41丨RESTfulWebServices(5):如何通过对数据测试的管理来凸显意图?.mp4

41丨RESTfulWebServices(5):如何通过对数据测试的管理来凸显意图?.html

41丨RESTfulWebServices(5):如何通过对数据测试的管理来凸显意图?.pdf

41丨RESTfulWebServices(5):如何通过对数据测试的管理来凸显意图?.m4a

42丨RESTfulWebServices(6):如何处理JAX-RS定义的异常类?

42丨RESTfulWebServices(6):如何处理JAX-RS定义的异常类?.m4a

42丨RESTfulWebServices(6):如何处理JAX-RS定义的异常类?.html

42丨RESTfulWebServices(6):如何处理JAX-RS定义的异常类?.mp4

42丨RESTfulWebServices(6):如何处理JAX-RS定义的异常类?.pdf

43丨RESTfulWebServices(7):剩下两个SadPath场景该如何处理?

43丨RESTfulWebServices(7):剩下两个SadPath场景该如何处理?.html

43丨RESTfulWebServices(7):剩下两个SadPath场景该如何处理?.m4a

43丨RESTfulWebServices(7):剩下两个SadPath场景该如何处理?.mp4

43丨RESTfulWebServices(7):剩下两个SadPath场景该如何处理?.pdf

44丨RESTfulWebServices(8):如何在现有代码的基础上构造测试?

44丨RESTfulWebServices(8):如何在现有代码的基础上构造测试?.mp4

44丨RESTfulWebServices(8):如何在现有代码的基础上构造测试?.m4a

44丨RESTfulWebServices(8):如何在现有代码的基础上构造测试?.pdf

44丨RESTfulWebServices(8):如何在现有代码的基础上构造测试?.html

45丨RESTfulWebServices(9):通过伦敦学派得到的测试风格是什么样的?

45丨RESTfulWebServices(9):通过伦敦学派得到的测试风格是什么样的?.m4a

45丨RESTfulWebServices(9):通过伦敦学派得到的测试风格是什么样的?.pdf

45丨RESTfulWebServices(9):通过伦敦学派得到的测试风格是什么样的?.html

45丨RESTfulWebServices(9):通过伦敦学派得到的测试风格是什么样的?.mp4

46丨RESTfulWebServices(10):伦敦学派与经典学派的测试节奏有何不同?

46丨RESTfulWebServices(10):伦敦学派与经典学派的测试节奏有何不同?.m4a

46丨RESTfulWebServices(10):伦敦学派与经典学派的测试节奏有何不同?.pdf

46丨RESTfulWebServices(10):伦敦学派与经典学派的测试节奏有何不同?.html

47丨RESTfulWebServices(11):如何通过Spike来验证架构愿景?

47丨RESTfulWebServices(11):如何通过Spike来验证架构愿景?.mp4

47丨RESTfulWebServices(11):如何通过Spike来验证架构愿景?.html

47丨RESTfulWebServices(11):如何通过Spike来验证架构愿景?.pdf

47丨RESTfulWebServices(11):如何通过Spike来验证架构愿景?.m4a

48丨RESTfulWebServices(12):如何调整接口和架构愿景?

48丨RESTfulWebServices(12):如何调整接口和架构愿景?.pdf

48丨RESTfulWebServices(12):如何调整接口和架构愿景?.html

48丨RESTfulWebServices(12):如何调整接口和架构愿景?.mp4

48丨RESTfulWebServices(12):如何调整接口和架构愿景?.m4a

49丨RESTfulWebService(13):如何SpikeSub-ResourceLocator?

49丨RESTfulWebService(13):如何SpikeSub-ResourceLocator?.m4a

49丨RESTfulWebService(13):如何SpikeSub-ResourceLocator?.html

49丨RESTfulWebService(13):如何SpikeSub-ResourceLocator?.mp4

49丨RESTfulWebService(13):如何SpikeSub-ResourceLocator?.pdf

50|RESTful Web Services(14):分解任务与Setup测试

50丨RESTfulWebServices(14):分解任务与Setup测试.html

50丨RESTfulWebServices(14):分解任务与Setup测试.pdf

50丨RESTfulWebServices(14):分解任务与Setup测试.m4a

50|RESTful Web Services(14):分解任务与Setup测试.mp4

51|RESTful Web Services(15):为什么选择在第一个测试之后就开始重构?

51丨RESTfulWebServices(15):为什么选择在第一个测试之后就开始重构?.pdf

51丨RESTfulWebServices(15):为什么选择在第一个测试之后就开始重构?.m4a

51丨RESTfulWebServices(15):为什么选择在第一个测试之后就开始重构?.html

51|RESTful Web Services(15):为什么选择在第一个测试之后就开始重构?.mp4

52|RESTful Web Services(16):重构手法之设计方法名的名称

52丨RESTfulWebServices(16):重构手法之设计方法名的名称.pdf

52丨RESTfulWebServices(16):重构手法之设计方法名的名称.html

52丨RESTfulWebServices(16):重构手法之设计方法名的名称.m4a

52|RESTful Web Services(16):重构手法之设计方法名的名称.mp4

53|RESTful Web Services(17):如何进行Spike的架构愿景细化?

53丨RESTfulWebServices(17):如何进行Spike的架构愿景细化?.html

53|RESTful Web Services(17):如何进行Spike的架构愿景细化?.mp4

53丨RESTfulWebServices(17):如何进行Spike的架构愿景细化?.m4a

53丨RESTfulWebServices(17):如何进行Spike的架构愿景细化?.pdf

54|RESTful Web Services(18):如何实现UriTemplate的主要功能?

54丨RESTfulWebServices(18):如何实现UriTemplate的主要功能?.html

54|RESTful Web Services(18):如何实现UriTemplate的主要功能?.mp4

54丨RESTfulWebServices(18):如何实现UriTemplate的主要功能?.pdf

54丨RESTfulWebServices(18):如何实现UriTemplate的主要功能?.m4a

55|RESTful Web Services(19):如何更有效地构造测试数据?

55丨RESTfulWebServices(19):如何更有效地构造测试数据?.html

55丨RESTfulWebServices(19):如何更有效地构造测试数据?.pdf

55丨RESTfulWebServices(19):如何更有效地构造测试数据?.m4a

55|RESTful Web Services(19):如何更有效地构造测试数据?.mp4

56|RESTful Web Services(20):为什么要通过测试的方法来驱动出代码结构?

56丨RESTfulWebServices(20):为什么要通过测试的方法来驱动出代码结构?.m4a

56丨RESTfulWebServices(20):为什么要通过测试的方法来驱动出代码结构?.html

56丨RESTfulWebServices(20):为什么要通过测试的方法来驱动出代码结构?.pdf

56|RESTful Web Services(20):为什么要通过测试的方法来驱动出代码结构?.mp4

57|RESTful Web Services(21):按照三角法,该如何增加新的测试案例?

57丨RESTfulWebServices(21):按照三角法,该如何增加新的测试案例?.html

57丨RESTfulWebServices(21):按照三角法,该如何增加新的测试案例?.pdf

57|RESTful Web Services(21):按照三角法,该如何增加新的测试案例?.mp4

57丨RESTfulWebServices(21):按照三角法,该如何增加新的测试案例?.m4a

58|RESTful Web Services(22):重构还是继续完成功能?

58丨RESTfulWebServices(22):重构还是继续完成功能?.pdf

58丨RESTfulWebServices(22):重构还是继续完成功能?.m4a

58|RESTful Web Services(22):重构还是继续完成功能?.mp4

58丨RESTfulWebServices(22):重构还是继续完成功能?.html

59|RESTful Web Services(23):如何构造测试数据?

59丨RESTfulWebServices(23):如何构造测试数据?.html

59|RESTful Web Services(23):如何构造测试数据?.mp4

59丨RESTfulWebServices(23):如何构造测试数据?.m4a

59丨RESTfulWebServices(23):如何构造测试数据?.pdf

60|RESTful Web Services(24):RootResource的测试要如何改造?

60丨RESTfulWebServices(24):RootResource的测试要如何改造?.m4a

60丨RESTfulWebServices(24):RootResource的测试要如何改造?.pdf

60丨RESTfulWebServices(24):RootResource的测试要如何改造?.html

60|RESTful Web Services(24):RootResource的测试要如何改造?.mp4

61|RESTful Web Services(25):如何重构DefaultResourceRouter中的Result结构?

61丨RESTfulWebServices(25):如何重构DefaultResourceRouter中的Result结构?.html

61丨RESTfulWebServices(25):如何重构DefaultResourceRouter中的Result结构?.pdf

61 |RESTful Web Services(25):如何重构DefaultResourceRouter中的Result结构?.mp4

61丨RESTfulWebServices(25):如何重构DefaultResourceRouter中的Result结构?.m4a

62|RESTful Web Services(26):如何继续划分ResourceLocator的任务?

62|RESTful Web Services(26):如何继续划分ResourceLocator的任务?.mp4

62丨RESTfulWebServices(26):如何继续划分ResourceLocator的任务?.pdf

62丨RESTfulWebServices(26):如何继续划分ResourceLocator的任务?.m4a

62丨RESTfulWebServices(26):如何继续划分ResourceLocator的任务?.html

63|RESTful Web Services(27):如何通过重构修改接口?

63丨RESTfulWebServices(27):如何通过重构修改接口?.m4a

63丨RESTfulWebServices(27):如何通过重构修改接口?.html

63|RESTful Web Services(27):如何通过重构修改接口?.mp4

63丨RESTfulWebServices(27):如何通过重构修改接口?.pdf

64|RESTful Web Services(28):如何重构Resource、SubResource等接口与实现?

64丨RESTfulWebServices(28):如何重构Resource、SubResource等接口与实现?.pdf

64丨RESTfulWebServices(28):如何重构Resource、SubResource等接口与实现?.html

64丨RESTfulWebServices(28):如何重构Resource、SubResource等接口与实现?.m4a

64|RESTful Web Services(28):如何重构Resource、SubResource等接口与实现?.mp4

65|RESTful Web Services(29):后续任务将要如何划分与实现?

65丨RESTfulWebServices(29):后续任务将要如何划分与实现?.html

65丨RESTfulWebServices(29):后续任务将要如何划分与实现?.m4a

65|RESTful Web Services(29):后续任务将要如何划分与实现?.mp4

65丨RESTfulWebServices(29):后续任务将要如何划分与实现?.pdf

66|RESTful Web Services(30):什么情况下应该使用行为验证?

66丨RESTfulWebServices(30):什么情况下应该使用行为验证?.html

66丨RESTfulWebServices(30):什么情况下应该使用行为验证?.m4a

66丨RESTfulWebServices(30):什么情况下应该使用行为验证?.pdf

66|RESTful Web Services(30):什么情况下应该使用行为验证?.mp4

67|RESTful Web Services(31):对于option的测试策略应该是怎样的

67丨RESTfulWebServices(31):对于option的测试策略应该是怎样的.pdf

67|RESTful Web Services(31):对于option的测试策略应该是怎样的.mp4

67丨RESTfulWebServices(31):对于option的测试策略应该是怎样的.m4a

67丨RESTfulWebServices(31):对于option的测试策略应该是怎样的.html

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用,未经站长允许禁止转载、转售本站资源。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络站长QQ:502212423。

如果您已经成功付款但是无法显示下载地址,下载地址失效,请联系站长提供付款信息为您处理

教程资源、源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好是您所需要的资源