junit可执行但控制层无法执行_解决junit5无法使用gradle test运行测试
问题描述
在项目根目录下使用./graldew test发现测试都过,但是没有运行一个测试用例
测试类:
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
public class AnagramsTest {
@TestFactory
Stream should_return_single_char_given_single_string() {
return Stream.of("b", "i", "r", "o")
.map(str -> dynamicTest("should_return_" + str + "_given_" + str, () -> {
List actualList = Anagrams.calculate(str);
List expectedList = Arrays.asList(str);
assertThat(actualList).isEqualTo(expectedList);
}));
}
@TestFactory
Stream should_return_list_given_string_with_two_char() {
return Stream.of("bi", "br", "bo", "ir", "io", "ro")
.map(str -> dynamicTest("should_return_list_with_two_element_given_" + str, () -> {
List actualList = Anagrams.calculate(str);
assertThat(actualList).contains(str);
assertThat(actualList.size()).isEqualTo(2);
}));
}
@TestFactory
Stream should_return_list_given_string_with_three_char() {
return Stream.of("bir")
.map(str -> dynamicTest("should_return_list_with_two_element_given_" + str, () -> {
List actualList = Anagrams.calculate(str);
assertThat(actualList).contains(str);
assertThat(actualList.size()).isEqualTo(6);
}));
}
@TestFactory
Stream should_return_list_given_string_with_four_char() {
return Stream.of("biro")
.map(str -> dynamicTest("should_return_list_with_two_element_given_" + str, () -> {
List actualList = Anagrams.calculate(str);
assertThat(actualList).contains(str);
System.out.println(actualList);
assertThat(actualList.size()).isEqualTo(24);
}));
}}
思考
Q1:junit是什么?./gradlew test是如何运行测试的呢?
A1:
junit:是一种用来做单元测试的框架,特点就是:
提供简单注释@Test就可以将某一个方法注释为测试方法
提供丰富的断言方法进行测试
提供丰富的日志
提供测试运行的工具
gradlew test运行junit 4测试用例的方式:
到默认的src/main/java目录下,先编译源代码,文件存放在build/classes/main目录下
然后编译测试代码,放在build/classes/test目录下
执行build/classes/test目录下满足条件的测试类:
- 任何被@RunWith注解的子类
- 任何至少包含一个被@Test注解的类
- 任何继承自junit.framework.TestCase 或groovy.util.GroovyTestCase的类
判断后发现:所有的测试都在src/test/java中,因此保证测试可以被编译到build/classes/main目录中。
但是由于使用的是junit5所以测试用例都是使用注解@TestFactory,说明当前测试没有运行的原因就是gradle 并没有找到满足条件的测试类。
Q2:那么对于gradle test指令运行junit5和junit4有什么区别呢?
A2:
gradle运行junit4:
只需要加上依赖包testCompile 'junit:junit:4.12'
即可运行测试
但是junit5的测试运行就完全不一样了,junit5的基础架构如下图
image.png
由上图可知,为了在java虚拟机上运行junit5,我们需要启动Junit Platform,并且还有启动Junit ENGINE
Q3:如何使用gradle运行junit5的测试?
A3:如果测试中包含junit5的新的api比如@TestFactory那么这些api都来自于JUnit Jupiter。因此
项目中必须引入Junit Jupiter,因此需要加依赖包junit-jupiter-api
如果想要在平台正常使用api还必须要包含junit-jupiter-engine引擎
如果想要使用gradle运行测试,那么必须加入junit-platform-gradle-plugin插件该插件提供了可以使用gradle在junit平台上触发测试
image.png
Q5:最后junit5提供了使得log结果清晰明了的方式:
A5:
image.png
junitPlatform {
details 'tree'
} //保证测试的显示可以类似于一棵树
build.gradle的配置
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4")
}}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.junit.platform.gradle.plugin'
repositories {
jcenter()
}
dependencies {
testCompile 'org.assertj:assertj-core:3.9.0'
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.15.0'
testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") //提 供junit5的api
testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0-M4") //提供junit5 运行engine
}
junitPlatform {
details 'tree'
} //保证测试的显示可以类似于一棵树
junit可执行但控制层无法执行_解决junit5无法使用gradle test运行测试相关推荐
- junit可执行但控制层无法执行_springboot项目controller接口junit测试
原创不易,请多多支持!对软件技术感兴趣的童鞋请关注我,后续技术分享更精彩. 背景 springboot项目,有时需要对工程中的controller接口单元测试,而不仅仅只是service/dao层,在 ...
- junit可执行但控制层无法执行_Junit测试时ContextLoader.getCurrentWebApplicationContext()返回空值...
Junit测试时,test类调用manage类,manage类调用dao类 dao类的代码中有如下语句:ContextLoader.getCurrentWebApplicationContext() ...
- 自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成
自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块,距离控制模块 执行器的控制层主要包括:加减速控制模块 版本为:simulink2018b ...
- 自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块
自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块,距离控制模块 执行器的控制层主要包括:加减速控制模块 本产品一旦售出,概不退款 仅供学习 ...
- 使用定时器判断确保某个标签有值才执行方法, 控制js代码执行先后顺序
使用定时器判断确保某个标签有值才执行方法: var wait = setInterval(function(){ var diqu = $("#diqu").val();//确保有 ...
- 没有在该机执行windows脚本宿主的权限_解决办法
转载自:http://blog.sina.com.cn/s/blog_575a5980010096x3.html 前几天刚装一系统,使用雨林木风的经典怀旧GHOST安装版.准备安排后台运行一VBS脚本 ...
- mysql执行语句出来全是问号_解决MySQL中文输出变成问号的问题
解决MySQL中文输出变成问号的问题 于是我在程序中加入:mysql_query("SET NAMES GB2312");问题迎刃而解.主要是一个编码问题. 注意这句代码的插入位置 ...
- 自适应巡航控制算法ACC 控制层主要包括加速度计算模块,速度控制模块,距离控制模块
自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块,距离控制模块 执行器的控制层主要包括:加减速控制模块 版本为:simulink2018b ...
- 符号执行(静态执行、动态执行、并行执行、选择执行
目录 为什么需要符号执行: 符号执行基本模型 符号执行的基本思想 符号模型的执行语义 1.符号数据对象: 2.程序语句: 程序执行状态 路径约束条件pc 约束求解: 符号执行实例: 动态符号执行: 动 ...
- 穿行测试工作底稿 软件行业,内部控制审计工作底稿之确定控制是否得到执行(穿行测试).doc...
客 户 签 名 日 期 项 目 采购与付款流程 确定控制是否得到执行(穿行测试) 编制 索引号 P224-4 会计期间 复核 页 次 1 编制说明: 1. 在执行审计业务时,执业人员应当运用职业判断, ...
最新文章
- SAP WM 能否使用LT12去确认一个需要2-step法确认的TO单?
- node.js中对 mysql 进行增删改查等操作和async,await处理
- Searchable(搜索功能)(转)
- 认识DOM的三大节点:元素节点,文本节点,属性节点以及nodeName,nodeType,nodeValue的区别
- 【OpenCV 例程200篇】26. 图像的旋转(以原点为中心)
- 万分之二用百分之怎么表示_红木家具怎么辨别真假
- Centos YUM国内163源
- JAVA读取、写入Excel表格(含03版)
- 蓝桥杯 ADV-171 算法提高 身份证号码升级
- 内核同步与互斥的总结
- VirtualBox一类系统只能出现一个?
- vmlinuz 文件解压缩(zImage|bzImage)
- Navicat操作数据库
- IDC是什么意思,中小企业如何选择IDC机房?
- CSS W3C 统一验证工具和压缩
- TiDB 的现在和未来
- PS抠图轻松搞定头发丝,自学 Photoshop 2022 Mac版,证件换底不求人笔记
- Python AI 换脸,宋小宝都能换脸刘亦菲,你的网恋对象不知道有多可怕!
- android教案,android教学教案.doc
- matlab更换YAHEI CONSOLAS HYBRID字体