文档计划(暂定)
文档名称 |
计划完成时间 |
完成状态 |
第一篇 - 需求分析 |
2011-7-28 |
|
第二篇 - 插件扩展点 |
2011-7-30 |
|
第三篇 - JDT的AST模型 |
2011-7-30 |
|
第四篇 - JDT解析业务代码 |
2011-7-31 |
|
第五篇 - JDT生成单元测试
|
2011-7-31 |
|
寄语
今天给其他同事做了单元测试脚手架的分享,但是效果感觉不佳,因为我只是懵懵懂懂做好了,而后模模糊糊地重构优化了,但是怎样把这些经验、技术很好的表达出来,我确实还非常欠缺想法和实战经验,所以开始编写这几篇连载,想设法清晰地表达我开发这个插件的过程中遇到的各种各样的问题、以及解决思路。
前言
Boss常说:工具能做的事情,不要让工程师来做,尽量交给工具。而工程师应该将他们的思维和智慧用于更具创造力的地方。
什么是单元测试脚手架
首先,介绍一下什么是单元测试脚手架,意思是:你拿到一段需要做单元测试的代码,扔给这个插件,它会根据代码的一些特点,帮忙生成一些有规律的代码骨架,而后骨架里要放些什么馅儿之类的,就由开发者自己编写了。
还是举个例子吧。
对了,本文假定你也经常用某些框架来编写单元测试代码,最好就是跟笔者一样用的是JTester框架,如果实在不是,只要用过JMockit或者类似的就成。
有这样一个业务类代码:
public class DemoService {
BizSerivce bizSvr;
DataService dtSvr;
......
public int doBiz() {
return dtSvr.update(bizSvr.findById(1L));
}
}
在单元测试的概念中,定义bizSvr, dtSvr这样的成员变量为外部依赖,我们并不关注它们的实现,所以我们在编写单元测试代码的时候,通常会把它们mock掉。
在JTester中,通常会这样写DemoService的单元测试:
public class DemoServiceTest extends JTester {
@SpringBeanByName
DemoService demoService;
@SpringBeanFor
@Mocked
BizSerivce bizSvr;
@SpringBeanFor
@Mocked
DataService dtSvr;
@Test
public void test_doBiz() {
new Expectations(){
{
bizSvr.findById(anyLong);
result = ......;
dtSvr.update();
result = 1;
}
};
want.number(demoService.doBiz()).isEqualTo(1);
}
}
脚手架可以做的事情
细心观察这段代码,不难发现,这个单元测试类DemoServiceTest中,成员变量的声明、测试方法test_doBiz的声明、测试方法内的Expectations的创建代码中的mock代码,都是有规律可循的。
脚手架不能做的事情
我们所无法帮助编码者判断的是,这些mock代码需要返回什么值,它的入参可能是什么值,最终want.number()断言里会期望怎样的返回值。
需求明确了
这样脚手架的需求便明确了——为一个业务方法生成单元测试类,它当中会包括被测业务类、外部依赖类的声明、单元测试方法的声明以及方法调用的mock信息。
分享到:
相关推荐
1. **配置优化**:分析项目需求,对`package.json`、`config`等配置文件进行调整,例如修改构建参数、添加或移除依赖库,以及自定义构建路径等,以满足特定项目的需求。 2. **目录结构调整**:根据项目的模块化设计...
- **插件系统**:可以方便地添加和配置各种开发和构建插件,如PWA支持、单元测试等。 4. **JavaScript** 和 **前端开发**: - **ES6+语法**:Vue.js鼓励使用现代JavaScript特性,如箭头函数、模板字符串、解构...
而信息管理系统的设计与开发则是实现信息化管理的核心,通常包括需求分析、系统设计、编程实现、测试和维护等阶段。 结合【标签】,“Java”意味着该项目是用Java语言编写的,Java作为后端开发的主流语言,具有跨...
开发过程:需求分析-脚手架工具-数据mock-架构设计-代码编写-自测-编译打包 以线上生产环境来开发:代码开发及测试环节:UI标注完美还原设计图、以真实外卖APP数据做演示,以保证代码无兼容性问题。 代码规范: (1...
6. **脚手架工具**:Vue CLI作为官方提供的脚手架,可以快速初始化项目,包含webpack配置、热重载、单元测试等功能。 7. **开发与部署**: - 开发环境:利用Vue CLI的`serve`命令启动本地开发服务器,实时刷新页面...
**1.3 需求分析 (Requirements Analysis)** - **目标用户群体:** 分析博客系统的潜在用户,包括个人博主、企业用户等。 - **功能需求:** 列出博客系统应具备的核心功能,如发布文章、评论管理、用户认证等。 - **...
- **领域模型创建**:创建了第一个领域类 `Event`,并讨论了 Grails 中领域模型的基础概念。 - **领域类深入**:进一步探讨了领域类的高级特性,如验证规则和生命周期回调等。 - **测试领域类**:使用 Grails 提供的...
总结,Go-Nano是Golang在游戏开发领域的一颗璀璨明珠,它将Golang的强大性能与游戏服务器的特殊需求相结合,为开发者提供了一个高效、易用的开发平台。无论你是游戏开发的新手还是资深工程师,Go-Nano都值得你深入...
- **简介**:Vue CLI是一个官方支持的脚手架工具,用于快速搭建Vue项目的开发环境。 - **功能特性**:详细介绍Vue CLI的功能,包括项目初始化、构建工具链集成(如Webpack)、自动化测试等。 - **命令行工具**:讲解...
- **单元测试**:单元测试是软件开发中的一个重要环节,旨在验证单个组件或函数是否按照预期工作。Grails支持多种单元测试工具,如JUnit和Spock框架。 - **集成测试**:集成测试用于验证不同组件之间的交互是否正确...
- 根据需求分析,可以将股票管理网站分为以下几个主要模块: - **用户登录模块**:实现用户注册、登录等功能。 - **股票列表模块**:展示当前市场上的所有股票信息。 - **股票详情模块**:查看特定股票的详细...
单元测试是软件开发中的重要组成部分,它帮助确保每个组件都能独立正确地工作。 **4.2 集成测试** 集成测试关注于组件间的交互是否正常,有助于发现接口不兼容或逻辑错误等问题。 #### 五、领域模型 **5.1 ...
**需求分析**: 确定系统功能需求 2. **架构设计**: 选择合适的技术栈 3. **模块开发**: 实现具体功能模块 4. **集成测试**: 测试系统功能是否符合预期 5. **部署上线**: 发布到生产环境 - **关键点**: - **...
Vue.js拥有一个成熟的生态系统,包括但不限于Vue CLI、Vue Router、Vuex等官方库以及丰富的第三方插件和工具。 ### Vue实例和生命周期 #### 2.1 创建Vue实例 在Vue.js中,每个应用都是由一个或多个Vue实例构成的...
#### 第一部分:前端实践 - **前端职称**:根据职责的不同,前端开发者可能有不同的职称,如初级前端工程师、高级前端工程师、前端架构师等。 - **前端开发者所使用的技术**:HTML5、CSS3、JavaScript是最基本的...
1. **项目初始化**:使用Vite脚手架快速搭建项目结构。 2. **组件开发**: - **商品列表组件**:通过ChatGPT获取关于分页、排序等常见功能的实现建议。 - **搜索组件**:询问ChatGPT如何设计高效的搜索算法,并...
- **测试验证**:进行单元测试、集成测试等多轮测试,确保系统质量。 - **部署上线**:通过持续集成工具实现自动化部署。 #### 五、实施案例 为了更好地理解上述设计方案的实际应用效果,下面通过一个具体的案例...
3. **工具集**:包括构建工具(如Webpack、Gulp)、测试工具(如Mocha、Jest)、调试工具(如node-inspector)以及性能分析工具(如New Relic、PM2)等。 4. **最佳实践**:文档可能包含如何编写可维护、高性能的...
ECharts是一款由百度开发的开源数据可视化库,它支持丰富的图表类型,适用于各类数据分析和展示。 在这个"Vue学习项目"中,开发者将能够深入理解如何结合Vue 2、Webpack、Vue CLI以及ECharts 3来创建一个完整的前端...