本文系作者原创,如需转载请注明出处:https://blog.csdn.net/Turtllor/article/details/82853829
前言:今天 leader 让我学习一下Junit 。在搜索资料的过程中,了解到 Junit 的最新版本是Junit 5,本着“用新不用旧”的原则,我开始了Junit 5的学习之旅。以下为学习心得。
Junit5 User Guide (中文)http://sjyuan.cc/junit5/user-guide-cn/
第一步依赖就给我来了个下马威。
官方文档介绍依赖有两种方式,分别是 gradle 和 maven 。以前没用过 maven 方式,所以照例用 gradle 。但是文档并没有直接写依赖地址。只有翻看官方的demo,在工程gradle中,终于找到了:
testCompile('org.junit.jupiter:junit-jupiter-params:5.3.1')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.1')
然而官方文档中:
JUnit 5跟以前的JUnit版本不一样,它由几大不同的模块组成,这些模块分别来自三个不同的子项目。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
明明是三个模块啊,为啥只有两个模块的依赖地址呢?先试一下吧!
将上面两句依赖地址,填写到 app 的 gradle 中, “testCompile” 替换成 “textImplementation” , “testRuntime” 替换成 “testRuntimeOnly”,编译通过,万事大吉。
然而,问题又出现了 —— 运行一个编写完成的简单的测试用例时报错:
本文系作者原创,如需转载请注明出处:https://blog.csdn.net/Turtllor/article/details/82853829
分析问题 —— 哪里缺少补哪里:
在这里引用一张官网的“依赖关系图”:
可以看到“Runner” 这个类,在pathform 模块中。
文档中也提到过。
JUnit Platform是在JVM上 启动测试框架 的基础平台。它还定义了 TestEngine API,该API可用于开发在平台上运行的测试框架。此外,平台还提供了一个从命令行或者 Gradle 和 Maven 插件来启动的 控制台启动器 ,它就好比一个 基于JUnit 4的Runner 在平台上运行任何
TestEngine
。
果然是在这里没错了。那么怎么添加Junit Pathform 的依赖呢?
本文系作者原创,如需转载请注明出处:https://blog.csdn.net/Turtllor/article/details/82853829
其实 ,Gradle 4.6 及以后版本,对Junit5 提供了原生的支持。所以,如果想更好的使用 Junit 5 ,建议将项目的 gradle 版本升级至 4.6 以上。
需要支持 JUnit Platform,那么在 gradle 文件中添加:
test {
useJUnitPlatform()
}
当然,JUnit Jupiter 的依赖地址长这样:
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.0'
}
你以为这样就结束了吗?
并没有!
Could not find method test() for arguments [build_bqe1zix2ee9lpkapiav6dpsdv$_run_closure5@394784ac] on project ':app' of type org.gradle.api.Project.
Open File
编译是报错,提示找不到 test 的方法!
求助同事,登录谷歌开发者网站,下列文字赫然入目,让我不由心灰:
测试支持库功能
Android 测试支持库包括以下自动化测试工具:
- AndroidJUnitRunner:适用于 Android 且与 JUnit 4 兼容的测试运行器
- Espresso:UI 测试框架;适合应用中的功能性 UI 测试
- UI Automator:UI 测试框架;适合跨系统和已安装应用的跨应用功能性 UI 测试
换言之,目前Android 不支持Junit 5,遂放弃,改学 Junit4。