问题描述

在项目根目录下使用./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运行测试相关推荐

  1. junit可执行但控制层无法执行_springboot项目controller接口junit测试

    原创不易,请多多支持!对软件技术感兴趣的童鞋请关注我,后续技术分享更精彩. 背景 springboot项目,有时需要对工程中的controller接口单元测试,而不仅仅只是service/dao层,在 ...

  2. junit可执行但控制层无法执行_Junit测试时ContextLoader.getCurrentWebApplicationContext()返回空值...

    Junit测试时,test类调用manage类,manage类调用dao类 dao类的代码中有如下语句:ContextLoader.getCurrentWebApplicationContext() ...

  3. 自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成

    自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块,距离控制模块 执行器的控制层主要包括:加减速控制模块 版本为:simulink2018b ...

  4. 自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块

    自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块,距离控制模块 执行器的控制层主要包括:加减速控制模块 本产品一旦售出,概不退款 仅供学习 ...

  5. 使用定时器判断确保某个标签有值才执行方法, 控制js代码执行先后顺序

    使用定时器判断确保某个标签有值才执行方法: var wait = setInterval(function(){ var diqu = $("#diqu").val();//确保有 ...

  6. 没有在该机执行windows脚本宿主的权限_解决办法

    转载自:http://blog.sina.com.cn/s/blog_575a5980010096x3.html 前几天刚装一系统,使用雨林木风的经典怀旧GHOST安装版.准备安排后台运行一VBS脚本 ...

  7. mysql执行语句出来全是问号_解决MySQL中文输出变成问号的问题

    解决MySQL中文输出变成问号的问题 于是我在程序中加入:mysql_query("SET NAMES GB2312");问题迎刃而解.主要是一个编码问题. 注意这句代码的插入位置 ...

  8. 自适应巡航控制算法ACC 控制层主要包括加速度计算模块,速度控制模块,距离控制模块

    自适应巡航控制算法ACC 自适应巡航控制算法 由控制层和执行层组成 控制层主要包括加速度计算模块,速度控制模块,距离控制模块 执行器的控制层主要包括:加减速控制模块 版本为:simulink2018b ...

  9. 符号执行(静态执行、动态执行、并行执行、选择执行

    目录 为什么需要符号执行: 符号执行基本模型 符号执行的基本思想 符号模型的执行语义 1.符号数据对象: 2.程序语句: 程序执行状态 路径约束条件pc 约束求解: 符号执行实例: 动态符号执行: 动 ...

  10. 穿行测试工作底稿 软件行业,内部控制审计工作底稿之确定控制是否得到执行(穿行测试).doc...

    客 户 签 名 日 期 项 目 采购与付款流程 确定控制是否得到执行(穿行测试) 编制 索引号 P224-4 会计期间 复核 页 次 1 编制说明: 1. 在执行审计业务时,执业人员应当运用职业判断, ...

最新文章

  1. SAP WM 能否使用LT12去确认一个需要2-step法确认的TO单?
  2. node.js中对 mysql 进行增删改查等操作和async,await处理
  3. Searchable(搜索功能)(转)
  4. 认识DOM的三大节点:元素节点,文本节点,属性节点以及nodeName,nodeType,nodeValue的区别
  5. 【OpenCV 例程200篇】26. 图像的旋转(以原点为中心)
  6. 万分之二用百分之怎么表示_红木家具怎么辨别真假
  7. Centos YUM国内163源
  8. JAVA读取、写入Excel表格(含03版)
  9. 蓝桥杯 ADV-171 算法提高 身份证号码升级
  10. 内核同步与互斥的总结
  11. VirtualBox一类系统只能出现一个?
  12. vmlinuz 文件解压缩(zImage|bzImage)
  13. Navicat操作数据库
  14. IDC是什么意思,中小企业如何选择IDC机房?
  15. CSS W3C 统一验证工具和压缩
  16. TiDB 的现在和未来
  17. PS抠图轻松搞定头发丝,自学 Photoshop 2022 Mac版,证件换底不求人笔记
  18. Python AI 换脸,宋小宝都能换脸刘亦菲,你的网恋对象不知道有多可怕!
  19. android教案,android教学教案.doc
  20. matlab更换YAHEI CONSOLAS HYBRID字体

热门文章

  1. AKOJ-2021-逆序对(归并,二分)
  2. 嵌入式 tomcat的使用
  3. Linux后台启动脚本
  4. Mybatis 插入与批量插入以及多参数批量删除
  5. TCP/IP三次握手四次挥手
  6. 23种设计模式(6):模版方法模式
  7. AD ---- 活动目录的日常管理操作(3)
  8. UBNT Bullet M2说明书
  9. QProcess实现交互式命令
  10. 【java与智能设备】CH07_01_Android中的文件存储