阿里巴巴研发效能团队开源的Java单元测试增强工具,换种思路写Mock,让单元测试更简单。
无需初始化,不挑测试框架,甭管要换的方法是被测类的私有方法、静态方法还是其他任何类的成员方法,也甭管要换的对象是怎么创建的。写好Mock方法,加个@MockMethod
注解,一切统统搞定。
|-- testable-parent ➜ 提供各子模块的公共父pom文件 |-- testable-all ➜ 依赖聚合,便于一次性引用所有子模块功能 |-- testable-processor ➜ 编译期代码预处理模块,提供测试辅助功能 |-- testable-agent ➜ JavaAgent模块,提供Mock测试相关功能 |-- testable-core ➜ 基础功能模块,提供Mock相关注解和工具类 |-- testable-maven-plugin ➜ Maven插件模块,用于简化JavaAgent注入 |-- demo | |-- java-demo ➜ Java语言的示例代码 | `-- kotlin-demo ➜ Kotlin语言的示例代码 `-- docs ➜ 项目使用文档
主项目使用JDK 1.6+和Maven 3+版本构建,其中demo
子项目需要JDK 1.8+版本。
mvn clean install
docsify serve docs
TestableMock文档使用docsify
工具生成,构建前请安装nodejs运行时,并使用npm install -g docsify
命令安装文档生成工具。
目录 一、TestableMock概述 二、快速Mock被测类的任意方法调用 三、覆写任意类的方法调用 四、覆写任意类的new操作 五、在Mock方法中区分调用来源 六、注意点 一、TestableMock概述 TestableMock是阿里云效团队开发的一款快速Mock的单元测试框架,旨在"让Java没有难测的代码"。 TestableMock现在已不仅是一款轻量易上手的单元测试Mock工具
TestableMock 阿里开源单元测试Mock工具 开始使用 以maven为例,在pom.xml中添加配置 <properties> <junit.version>5.6.2</junit.version> <testable.version>0.4.11</testable.version> </properties> <depen
单元测试原则 单元测试必须遵循AIR(Automatic, Independent, Repeatable)原则:单元测试在线上运行时,感觉像空气(AIR)一样感觉不到,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。 Automatic(自动化):单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有
前言 TestableMock是阿里的单元测试工具,支持Mock公共方法、私有方法、静态方法、构造方法等功能,使用方便快捷 目前主要的Mock工具主要有Mockito、Spock、PowerMock和JMockit,基本差异如下: 工具 原理 最小Mock单元 对被Mock方法的限制 上手难度 IDE支持 Mockito 动态代理 类 不能Mock私有/静态和构造方法 较容易 很好 Spock 动
TestableMock简介 TestableMock是基于源码和字节码增强的Java单元测试辅助工具,包含以下功能: 快速Mock任意调用:使被测类的任意方法调用快速替换为Mock方法,实现"指哪换哪",解决传统Mock工具使用繁琐的问题 访问被测类私有成员:使单元测试能直接调用和访问被测类的私有成员,解决私有成员初始化和私有方法测试的问题 辅助测试void方法:利用Mock校验器对方法的内部逻
目录 一、概述 二、基本校验器 三、基本匹配器 四、空值匹配器 五、字符串匹配器 六、万能匹配器 七、使用示例 一、概述 在测试中,除了需要将某些含有外部依赖的方法替换为Mock,经常还会需要验证该方法被调用时的参数是否符合预期。 在TestableMock中提供了校验器(verifier)和匹配器(matcher)来实现这一功能。譬如: @Test public test_case() {
基于轻量的原则,TestableMock为开发者提供了尽可能精炼、易用的注解组合,以下参数信息可供开发参考。 @EnablePrivateAccess 启用对被测类的私有成员访问编译期增强和私有目标存在性的编译期校验功能。 作用于:测试类 参数 类型 是否必须 默认值 作用 srcClass Class 否 N/A 当测试类命名不符合约定时,指定实际被测类 verifyTargetOnCompil
框架 springboot2.0 TestableMock Jacoco 代码结构 root-pom -pom1 --jar1 --jar2 -pom2 --jar1 --jar2 根pom下包含多个子pom,每个子pom又包含多个子module jar 覆盖率 在根pom下新建个module,test-module,依赖所有测试可能涉及的jar包 1.test-module的pom中引入jaco
TestableMock 参考文章 官网使用文档 源码
目录 一、概述 二、使用泛型定义 三、使用Object类型 一、概述 有时候,我们需要测试泛型方法,其实与普通方法的Mock方法相同,直接在Mock方法上使用相同的泛型参数即可。下面通过案例说明如何使用,主要有两种方式: 第一种方式:使用泛型定义; 第二种方式:使用Object类型; 二、使用泛型定义 【a】编写被测试类 package com.wsh.testable.mock.testable
目录 一、概述 二、使用案例 一、概述 在@MockMethod和@MockConstructor注解上都有一个scope参数,其可选值有两种: MockScope.GLOBAL:该Mock方法将全局生效; MockScope.ASSOCIATED:该Mock方法仅对Mock容器关联测试类中的测试用例生效; 对于常规项目而言,单元测试里需要被Mock的调用都是由于其中包含了不需要或不便于测试的逻辑
目录 一、概述 二、使用PrivateAccessor工具类 三、直接访问私有成员 一、概述 如今关于私有方法是否应该做单元测试的争论正逐渐消停,开发者的普遍实践已经给出事实答案。通过公有方法间接测私有方法在很多情况下难以进行,开发者们更愿意通过修改方法可见性的办法来让原本私有的方法在测试用例中变得可测。 此外,在单元测试中时常会需要对被测对象进行特定的成员字段初始化,但有时由于被测类的构造方法限
Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。
英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其
单元测试涉及测试软件应用程序的每个单元或单个组件。这是第一级软件测试。单元测试的目的是验证单元组件的性能。 单元是软件系统的单个可测试部分,并在应用程序软件的开发阶段进行测试。 此测试旨在测试隔离代码的正确性。单元组件是应用程序的单独功能或代码。白盒测试方法用于单元测试,通常由开发人员完成。 在测试级别层次结构中,单元测试是在集成和其他剩余测试级别之前完成的第一级测试。它使用模块进行测试,减少了等
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进
我们从 Hello World 项目入手,增加单元测试功能。 我们新家了一个名为hello-world-test的 Gradle 项目。 环境 Gradle 3.4.1 Spring Boot 1.5.2.RELEASE Thymeleaf 3.0.3.RELEASE Thymeleaf Layout Dialect 2.2.0 Spring Security Test 4.2.2.RELEASE
单元测试验证单个代码单元是否按预期工作。 也就是说,给定不同的输入参数, 测试验证类方法返回预期结果。 单元测试通常由编写待测试类的人开发。 Yii的单元测试框架 Codeception 基于 PHPUnit,Codeception 建议遵从 PHPUnit 的文档的进行开发: Codeception for Yii framework Codeception Unit Tests PHPUnit
单元测试 ClojureScript 的测试和 Clojure 语法类似, 通过 cljs.test 来提供. 首先需要引用下面这些函数或者 Macros: (ns my-project.tests (:require [cljs.test :refer-macros [deftest is testing run-tests]])) 然后可以定义一个测试: (deftest test-num
Mpx 会生成源码与最终产物包的映射关系,结合微信小程序提供的 miniprogram-simulate 来进行单元测试的工作。 因为目前仅微信提供了仿真工具,暂时只支持微信小程序平台的单元测试。如果需要 E2E 测试,则和框架无关了,可参考微信的小程序自动化。 简单的断言 组件必须是被项目真实使用的,且经过一次构建才可被测试。构建时 MpxPlugin 的配置信息中要将 generateBuil