1651239860469

课程主体可分为两个部分。

第一部分:演示开发全过程,见识真正的 TDD

首先,我们将从一个编码练习级别的小例子入手,展示使用 TDD 的方式来实现一个简单功能的开发全过程。让你眼见为实,对 TDD 形成一个感性、直观的认识。

并以此为引子,串联起 TDD 的所有相关知识点,为之后的实战练习打下基础。同时,你也会明确知道 TDD 作为工程方法的核心优势在哪里。如果你需要说服周围的同事、领导开始采用 TDD 方法,这将给你提供足够的弹药。

第二部分:实战细节全剖析,用 TDD 从头实现

然后,我们将进入实战项目环节。老师将以 3 个技术框架为例(IoC 容器、RESTful 框架、SQL mapper 框架),展示如何使用 TDD 的方式从头来实现它们,实战的细节将一览无遗。

TDD 有点像物理,定理写出来很简单,但需要在不同的场景下练习,才能应用得得心应手。所以,你会在这个部分看到 3 个实战项目,将会有 40+ 小时的视频演示。由徐昊老师在不同的上下文中带着你反复练习,帮助你搞定 TDD 的落地难题。

〖资源截图〗:

1640082530083-7

〖资源目录〗:

– ├──01-开篇词
– | ├──开篇词丨为什么TDD是当前最具工程效能的研发流程?.html 11.36M
– | ├──开篇词丨为什么TDD是当前最具工程效能的研发流程?.m4a 8.73M
– | ├──开篇词丨为什么TDD是当前最具工程效能的研发流程?.pdf Java新手必做题目9.61M
– | ├──课前必读丨20年前的“老古董”技术,为什么还值得开个课?.html 2.55M
– | ├──课前必读丨20年前的“老古董”技术,为什么还值得开个课?.m4a 7.15M
– | └──课前必读丨20年前的“老古董”技术,为什么还值得开个课?.pdf 3.46M
– ├──02-实战项目一:命令行参数解析
– | ├──01丨TDD演示(1):任务分解法与整体工作流程.html 12.45M
– | ├──01丨TDD演示(1):任务分解法与整体工作流程.m4a 4.60M
– | ├──01丨TDD演示(1):任务分解法与整体工作流程.pdf 11.66M
– | ├──02丨TDD演示(2):识别坏味道与代码重构.html 6.31M
– | ├──02丨TDD演示(2):识别坏味道与代码重构.m4a 3.80M
– | ├──02丨TDD演示(2):识别坏味道与代码重构.pdf 5.56M
– | ├──03丨TDD演示(3):按测试策略重组测试.html 10.09M
– | ├──03丨TDD演示(3):按测试策略重组测试.m4a 4.74M
– | ├──03丨TDD演示(3):按测试策略重组测试.mp4 18.29M
– | ├──03丨TDD演示(3):按测试策略重组测试.pdf 6.64M
– | ├──04丨TDD演示(4):实现对于列表参数的支持(2).mp4 21.45M
– | ├──04丨TDD演示(4):实现对于列表参数的支持.html 8.94M
– | ├──04丨TDD演示(4):实现对于列表参数的支持.m4a 5.21M
– | ├──04丨TDD演示(4):实现对于列表参数的支持.mp4 14.32M
– | ├──04丨TDD演示(4):实现对于列表参数的支持.pdf 8.06M
– | ├──05丨TDD中的测试(1):状态验证为什么是主要的使用方式?(2).mp4 11.37M
– | ├──05丨TDD中的测试(1):状态验证为什么是主要的使用方式?.html 9.75M
– | ├──05丨TDD中的测试(1):状态验证为什么是主要的使用方式?.m4a 5.66M
– | ├──05丨TDD中的测试(1):状态验证为什么是主要的使用方式?.mp4 22.15M
– | ├──05丨TDD中的测试(1):状态验证为什么是主要的使用方式?.pdf 5.66M
– | ├──06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?(2).mp4 7.81M
– | ├──06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?(3).mp4 7.93M
– | ├──06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?.html 1.67M
– |综合资源 ├──06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?.m4a 6.96M
– | ├──06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?.mp4 15.28M
– | ├──06丨TDD中的测试(2):行为验证为什么应该尽量避免使用?.pdf 9.41M
– | ├──07丨TDD中的测试(3):集成测试还是单元测试?.html 2.58M
– | ├──07丨TDD中的测试(3):集成测试还是单元测试?.m4a 6.08M
– | ├──07丨TDD中的测试(3):集成测试还是单元测试?.mp4 39.94M
– | ├──07丨TDD中的测试(3):集成测试还是单元测试?.pdf 3.80M
– | ├──08丨TDD中的驱动(1):驱动的极限是什么?(2).mp4 13.77M
– | ├──08丨TDD中的驱动(1):驱动的极限是什么?(3).mp4 19.10M
– | ├──08丨TDD中的驱动(1):驱动的极限是什么?.html 4.01M
– | ├──08丨TDD中的驱动(1):驱动的极限是什么?.m4a 5.27M
– | ├──08丨TDD中的驱动(1):驱动的极限是什么?.mp4 8.74M
– | ├──08丨TDD中的驱动(1):驱动的极限是什么?.pdf 2.60M
– | ├──09丨TDD中的驱动(2):重构发挥了什么作用?.html 5.58M
– | ├──09丨TDD中的驱动(2):重构发挥了什么作用?.m4a 4.48M
– | ├──09丨TDD中的驱动(2):重构发挥了什么作用?.mp4 10.74M
– | ├──09丨TDD中的驱动(2):重构发挥了什么作用?.pdf 4.82M
– | ├──10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?(2).mp4 27.70M
– | ├──10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?.html 1.78M
– | ├──10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?.m4a 3.98M
– | ├──10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?.mp4 7.86M
– | ├──10丨TDD中的驱动(3):何为经典学派?何为伦敦学派?.pdf 1.24M
– | ├──11丨作为工程化方法的TDD:更低的成本与更高的效能.html 7.29M
– | ├──11丨作为工程化方法的TDD:更低的成本与更高的效能.m4a 6.54M
– | └──11丨作为工程化方法的TDD:更低的成本与更高的效能.pdf 6.40M
– ├──03-TDD首发·代码评点
– | ├──代码评点01丨不同语言TDD的节奏有何不同?(2).mp4 7.34M
– | ├──代码评点01丨不同语言TDD的节奏有何不同?.html 2.70M
– | ├──代码评点01丨不同语言TDD的节奏有何不同?.m4a 917.88kb
– | ├──代码评点01丨不同语言TDD的节奏有何不同?.mp4 11.19M
– | ├──代码评点01丨不同语言TDD的节奏有何不同?.pdf 3.41M
– | ├──代码评点02丨什么是合适TDD的语言和IDE?.html 1.37M
– | ├──代码评点02丨什么是合适TDD的语言和IDE?.m4a 1.03M
– | ├──代码评点02丨什么是合适TDD的语言和IDE?.mp4 22.45M
– | └──代码评点02丨什么是合适TDD的语言和IDE?.pdf 1.90M
– ├──04-实战项目二丨RESTful开发框架:依赖注入容器
– | ├──28丨DIContainer(16):行为封装会对测试产生什么影响?
– | | ├──28丨DI Container(16):行为封装会对测试产生什么影响?.mp4 69.26M
– | | ├──28丨DIContainer(16):行为封装会对测试产生什么影响?.html 2.75M
– | | ├──28丨DIContainer(16):行为封装会对测试产生什么影响?.m4a 757.24kb
– | | └──28丨DIContainer(16):行为封装会对测试产生什么影响?.pdf 2.47M
– | ├──29丨DI Container(17):如何重构ContextConfig内部的实现?
– | | ├──29丨DI Container(17):如何重构ContextConfig内部的实现?.mp4 105.28M
– | | ├──29丨DIContainer(17):如何重构ContextConfig内部的实现?.html 2.54M
– | | ├──29丨DIContainer(17):如何重构ContextConfig内部的实现?.m4a 1.02M
– | | └──29丨DIContainer(17):如何重构ContextConfig内部的实现?.PDF 2.16M
– | ├──30丨DI Container(18):如何增补依赖缺失和循环依赖的测试?
– | | ├──30丨DI Container(18):如何增补依赖缺失和循环依赖的测试?.mp4 93.30M
– | | ├──30丨DIContainer(18):如何增补依赖缺失和循环依赖的测试?.html 2.46M
– | | ├──30丨DIContainer(18):如何增补依赖缺失和循环依赖的测试?.m4a 1.26M
– | | └──30丨DIContainer(18):如何增补依赖缺失和循环依赖的测试?.PDF 2.37M
– | ├──31丨DI Container(19):Qualifier部分的功能要如何完成?
– | | ├──31丨DI Container(19):Qualifier部分的功能要如何完成?.mp4 90.87M
– | | ├──31丨DIContainer(19):Qualifier部分的功能要如何完成?.html 2.56M
– | | ├──31丨DIContainer(19):Qualifier部分的功能要如何完成?.m4a 1017.36kb
– | | └──31丨DIContainer(19):Qualifier部分的功能要如何完成?.PDF 2.97M
– | ├──32丨DI Container(20):如何对代码和测试进行重构?
– | | ├──32丨DI Container(20):如何对代码和测试进行重构?.mp4 105.77M
– | | ├──32丨DIContainer(20):如何对代码和测试进行重构?.html 2.44M
– | | ├──32丨DIContainer(20):如何对代码和测试进行重构?.m4a 1.61M
– | | └──32丨DIContainer(20):如何对代码和测试进行重构?.PDF 2.68M
– | ├──33丨DI Container(21):如何处理Singleton生命周期部分的功能?
– | | ├──33丨DI Container(21):如何处理Singleton生命周期部分的功能?.mp4 121.73M
– | | ├──33丨DIContainer(21):如何处理Singleton生命周期部分的功能?.html 1.93M
– | | ├──33丨DIContainer(21):如何处理Singleton生命周期部分的功能?.m4a 1.04M
– | | └──33丨DIContainer(21):如何处理Singleton生命周期部分的功能?.PDF 2.88M
– | ├──34丨DI Container(22):如何对Bind的逻辑进行重构?
– | | ├──34丨DI Container(22):如何对Bind的逻辑进行重构?.mp4 84.45M
– | | ├──34丨DIContainer(22):如何对Bind的逻辑进行重构?.html 1.72M
– | | ├──34丨DIContainer(22):如何对Bind的逻辑进行重构?.m4a 991.07kb
– | | └──34丨DIContainer(22):如何对Bind的逻辑进行重构?.PDF 2.60M
– | ├──35丨DIContainer(23):项目回顾与总结
– | | ├──35丨DI Container(23):项目回顾与总结.mp4 23.84M
– | | ├──35丨DIContainer(23):项目回顾与总结.html 4.07M
– | | ├──35丨DIContainer(23):项目回顾与总结.m4a 3.39M
– | | └──35丨DIContainer(23):项目回顾与总结.pdf 4.54M
– | ├──12丨实战中的TDD:RESTfulAPI的开发框架(2).mp4 58.42M
– | ├──12丨实战中的TDD:RESTfulAPI的开发框架.html 2.23M
– | ├──12丨实战中的TDD:RESTfulAPI的开发框架.m4a 2.05M
– | ├──12丨实战中的TDD:RESTfulAPI的开发框架.mp4 12.53M
– | ├──12丨实战中的TDD:RESTfulAPI的开发框架.pdf 2.35M
– | ├──13丨DIContainer(1):如何实现基本的DI容器结构?.html 3.63M
– | ├──13丨DIContainer(1):如何实现基本的DI容器结构?.m4a 1.64M
– | ├──13丨DIContainer(1):如何实现基本的DI容器结构?.mp4 46.50M
– | ├──13丨DIContainer(1):如何实现基本的DI容器结构?.pdf 3.58M
– | ├──14丨DIContainer(2):如何通过SadPath为容器增加功能?(2).mp4 43.18M
– | ├──14丨DIContainer(2):如何通过SadPath为容器增加功能?.html 4.57M
– | ├──14丨DIContainer(2):如何通过SadPath为容器增加功能?.m4a 888.16kb
– | ├──14丨DIContainer(2):如何通过SadPath为容器增加功能?.mp4 30.20M
– | ├──14丨DIContainer(2):如何通过SadPath为容器增加功能?.pdf 5.00M
– | ├──15丨DIContainer(3):如何重构已有的代码?.html 3.65M
– | ├──15丨DIContainer(3):如何重构已有的代码?.m4a 993.17kb
– | ├──15丨DIContainer(3):如何重构已有的代码?.mp4 15.20M
– | ├──15丨DIContainer(3):如何重构已有的代码?.pdf 5.34M
– | ├──16丨DIContainer(4):如何实现对循环依赖的处理?.html 4.18M
– | ├──16丨DIContainer(4):如何实现对循环依赖的处理?.m4a 1.45M
– | ├──16丨DIContainer(4):如何实现对循环依赖的处理?.mp4 88.78M
– | ├──16丨DIContainer(4):如何实现对循环依赖的处理?.pdf 2.56M
– | ├──17丨DIContainer(5):API接口该怎么设计?.html 3.35M
– | ├──17丨DIContainer(5):API接口该怎么设计?.m4a 1.22M
– | ├──17丨DIContainer(5):API接口该怎么设计?.mp4 64.15M
– | ├──17丨DIContainer(5):API接口该怎么设计?.pdf 1.57M
– | ├──18丨DIContainer(6):如何实现循环依赖的检查?.html 3.72M
– | ├──18丨DIContainer(6):如何实现循环依赖的检查?.m4a 1.48M
– | ├──18丨DIContainer(6):如何实现循环依赖的检查?.mp4 63.55M
– | ├──18丨DIContainer(6):如何实现循环依赖的检查?.pdf 5.12M
– | ├──19丨DIContainer(7):如何实现FieldInjection部分的功能?.html 2.39M
– | ├──19丨DIContainer(7):如何实现FieldInjection部分的功能?.m4a 1.02M
– | ├──19丨DIContainer(7):如何实现FieldInjection部分的功能?.mp4 75.61M
– | ├──19丨DIContainer(7):如何实现FieldInjection部分的功能?.pdf 2.52M
– | ├──20丨DIContainer(8):如何实现MethodInjection部分的功能?.html 2.23M
– | ├──20丨DIContainer(8):如何实现MethodInjection部分的功能?.m4a 650.07kb
– | ├──20丨DIContainer(8):如何实现MethodInjection部分的功能?.mp4 85.71M
– | ├──20丨DIContainer(8):如何实现MethodInjection部分的功能?.pdf 2.57M
– | ├──21丨DIContainer(9):怎样重构测试代码?.html 2.50M
– | ├──21丨DIContainer(9):怎样重构测试代码?.m4a 1.14M
– | ├──21丨DIContainer(9):怎样重构测试代码?.mp4 108.64M
– | ├──21丨DIContainer(9):怎样重构测试代码?.pdf 2.73M
– | ├──22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.html 1.70M
– | ├──22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.m4a 1.00M
– | ├──22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.mp4 92.54M
– | ├──22丨DIContainer(10):怎样将大粒度的测试重构为等效的小粒度测试代码?.pdf 1.62M
– | ├──23丨DI Container(11):如何对ContainerTest进行文档化改造?.mp4 114.14M
– | ├──23丨DIContainer(11):如何对ContainerTest进行文档化改造?.html 1.79M
– | ├──23丨DIContainer(11):如何对ContainerTest进行文档化改造?.m4a 878.34kb
– | ├──23丨DIContainer(11):如何对ContainerTest进行文档化改造?.pdf 2.04M
– | ├──24丨DI Container(12):如何增补功能?.mp4 88.13M
– | ├──24丨DIContainer(12):如何增补功能?.html 1.78M
– | ├──24丨DIContainer(12):如何增补功能?.m4a 1.10M
– | ├──24丨DIContainer(12):如何增补功能?.pdf 1.78M
– | ├──25丨DI Container(13):任务上的遗漏该怎么处理?.mp4 88.48M
– | ├──25丨DIContainer(13):任务上的遗漏该怎么处理?.html 2.03M
– | ├──25丨DIContainer(13):任务上的遗漏该怎么处理?.m4a 741.40kb
– | ├──25丨DIContainer(13):任务上的遗漏该怎么处理?.pdf 1.71M
– | ├──26丨DI Container(14):如何重构对Type类型判断的逻辑?.mp4 78.32M
– | ├──26丨DIContainer(14):如何重构对Type类型判断的逻辑?.html 2.58M
– | ├──26丨DIContainer(14):如何重构对Type类型判断的逻辑?.m4a 1.04M
– | ├──26丨DIContainer(14):如何重构对Type类型判断的逻辑?.pdf 3.16M
– | ├──27丨DI Container(15):如何封装类型判断逻辑?.mp4 120.11M
– | ├──27丨DIContainer(15):如何封装类型判断逻辑?.html 2.38M
– | ├──27丨DIContainer(15):如何封装类型判断逻辑?.m4a 879.16kb
– | └──27丨DIContainer(15):如何封装类型判断逻辑?.pdf 2.50M
– └──05-实战项目三|RESTfulWebServices
– | ├──36丨实战中的TDD:RESTfulWebServices
– | | ├──36丨实战中的TDD:RESTfulWebServices(2).mp4 50.15M
– | | ├──36丨实战中的TDD:RESTfulWebServices.html 1.59M
– | | ├──36丨实战中的TDD:RESTfulWebServices.m4a 1.30M
– | | ├──36丨实战中的TDD:RESTfulWebServices.mp4 15.69M
– | | └──36丨实战中的TDD:RESTfulWebServices.pdf 1.41M
– | ├──37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互
– | | ├──37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互.html 3.10M
– | | ├──37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互.m4a 4.16M
– | | ├──37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互.mp4 84.88M
– | | └──37丨RESTfulWebServices(1):明确架构愿景与架构组件间的交互.pdf 3.60M
– | ├──38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?
– | | ├──38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.html 1.89M
– | | ├──38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.m4a 1.16M
– | | ├──38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.mp4 83.04M
– | | └──38丨RESTfulWebServices(2):根据Spike的结果,要如何调整架构愿景?.pdf 1.70M
– | ├──39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序
– | | ├──39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序(1).mp4 24.77M
– | | ├──39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序.html 3.16M
– | | ├──39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序.m4a 1.22M
– | | ├──39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序.mp4 70.01M
– | | └──39丨RESTfulWebServices(3):明确架构愿景与调用栈顺序.pdf 2.52M
– | └──40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?
– | | ├──40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.html 4.60M
– | | ├──40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.m4a 3.34M
– | | ├──40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.mp4 56.59M
– | | └──40丨RESTfulWebServices(4):在当前架构愿景下,要如何分解任务?.pdf 4.18M

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注