SpringBoot2---单元测试(Junit5)(1)

这篇具有很好参考价值的文章主要介绍了SpringBoot2---单元测试(Junit5)(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

org.junit.vintage

junit-vintage-engine

test

org.hamcrest

hamcrest-core

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

org.springframework.boot

spring-boot-starter-test

test

现在版本:

@SpringBootTest

class Boot05WebAdminApplicationTests {

@Test

void contextLoads() {

}

}

以前:

@SpringBootTest + @RunWith(SpringRunner.class)

SpringBoot整合Junit以后。

编写测试方法:@Test标注(注意需要使用junit5版本的注解)

Junit类具有Spring的功能,@Autowired、比如 @Transactional 标注测试方法,测试完成后自动回滚


JUnit5常用注解

=========================================================================

@Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试

@ParameterizedTest :表示方法是参数化测试,下方会有详细介绍

@RepeatedTest :表示方法可重复执行,指定测试次数,会重复指定次数

@DisplayName :为测试类或者测试方法设置展示名称

@BeforeEach :表示在每个单元测试之前执行

@AfterEach :表示在每个单元测试之后执行

@BeforeAll :表示在所有单元测试之前执行

@AfterAll :表示在所有单元测试之后执行

标注这上面两个注解的方法必须是static

@Tag :表示单元测试类别,类似于JUnit4中的@Categories

@Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore

@Timeout :表示测试方法运行如果超过了指定时间将会返回错误

@ExtendWith :为测试类或测试方法提供扩展类引用


常用注解使用演示

=======================================================================

//@RunWith

/*

@BootstrapWith(SpringBootTestContextBootstrapper.class)

@ExtendWith({SpringExtension.class})===>替代runwith

*/

@SpringBootTest //使用spring的测试驱动进行测试,这样就可以使用SpringBoot中的容器功能了

@DisplayName(“自定义测试类”)

public class Test

{

@DisplayName(“自定义测试方法”)

@org.junit.jupiter.api.Test

public void test1()

{

System.out.println(“测试方法1运行”);

}

@Disabled //该测试方法不执行

@org.junit.jupiter.api.Test

public void test2()

{

System.out.println(“测试方法2运行”);

}

@RepeatedTest(5)//当前测试方法一旦运行就执行5次

@org.junit.jupiter.api.Test

public void test3()

{

System.out.println(“测试方法3运行”);

}

//规定方法的超时时间,超出指定时间就会抛出异常

@org.junit.jupiter.api.Test

@Timeout(value = 1,unit = TimeUnit.SECONDS)//指定单位,这里是秒

public void test4() throws InterruptedException {

Thread.sleep(3000);

System.out.println(“测试方法4运行”);

}

@BeforeEach

public void testBeforeEach()

{

System.out.println(“测试方法即将开始”);

}

@AfterEach

public void testAfterEachEach()

{

System.out.println(“测试方法结束”);

}

@BeforeAll

static public void testBeforeAll()

{

System.out.println(“所有测试方法即将开始”);

}

@AfterAll

static public void testAfterEachAll()

{

System.out.println(“所有测试方法结束”);

}

}

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j


断言机制(assertions)

===============================================================================

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:

  • 检查业务逻辑返回的数据是否合理。

  • 所有的测试运行结束以后,会有一个详细的测试报告;


1、简单断言


用来对单个值进行简单的验证。如:

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

前面的断言失败,后面的断言不会执行

@Test

@DisplayName(“simple assertion”)

public void simple() {

assertEquals(3, 1 + 2, “simple math”);

assertNotEquals(3, 1 + 1);

assertNotSame(new Object(), new Object());

Object obj = new Object();

assertSame(obj, obj);

assertFalse(1 > 2);

assertTrue(1 < 2);

assertNull(null);

assertNotNull(new Object());

}

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j


2、数组断言


通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

是逻辑相等,也就是equals,不是地址相等,即==对于数组就是数组元素一致

@Test

@DisplayName(“array assertion”)

public void array() {

assertArrayEquals(new int[]{1, 2}, new int[] {1, 2},“数组内容不相等”);

}


3、组合断言


assertAll 方法接受多个 org.junit.jupiter.api.Executable 函数式接口的实例作为要验证的断言,可以通过 lambda 表达式很容易的提供这些断言

全部断言需要成功,才会执行下面的代码

@Test

@DisplayName(“assert all”)

public void all() {

assertAll(“Math”,

() -> assertEquals(2, 1 + 1),

() -> assertTrue(1 > 0)

);

}


4、异常断言


在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。而JUnit5提供了一种新的断言方式Assertions.assertThrows() ,配合函数式编程就可以进行使用

第一个参数是预期出现的异常类型,第二个参数是Executable 接口,第三个参数是不符合第一个异常时抛出的信息

断定业务逻辑一定会出现异常,否则会抛出异常

@Test

@DisplayName(“异常测试”)

public void exceptionTest() {

ArithmeticException exception = Assertions.assertThrows(

//扔出断言异常

ArithmeticException.class, () -> System.out.println(1 % 0));

}


5、超时断言


Junit5还提供了Assertions.assertTimeout() 为测试方法设置了超时时间

@Test

@DisplayName(“超时测试”)

public void timeoutTest() {

//如果测试方法时间超过1s将会异常

Assertions.assertTimeout(Duration.ofMillis(1000), () -> Thread.sleep(500));

}


6、快速失败


通过 fail 方法直接使得测试失败

@Test

@DisplayName(“fail”)

public void shouldFail() {

fail(“This should fail”);

}


4、前置条件(assumptions)


JUnit 5 中的前置条件(assumptions【假设】)类似于断言,不同之处在于不满足的断言会使得测试方法失败,而不满足的前置条件只会使得测试方法的执行终止。前置条件可以看成是测试方法执行的前提,当该前提不满足时,就没有继续执行的必要。

和@disabled一样在测试报告中表现为skiped,注意和上面的包区分,这些方法都是assumptions下面的,上面是assertions下面的。

@DisplayName(“前置条件”)

public class Test {

private final String environment = “DEV”;

@org.junit.jupiter.api.Test

@DisplayName(“simple”)

public void simpleAssume() {

assumeTrue(Objects.equals(this.environment, “DEV1”),“两个字符串不相等”);

assumeFalse(() -> Objects.equals(this.environment, “PROD”));

}

@org.junit.jupiter.api.Test

@DisplayName(“assume then do”)

public void assumeThenDo() {

//如果假设成功了,要怎么办

assumingThat(

Objects.equals(this.environment, “DEV”),

() -> System.out.println(“In DEV”)

);

}

}

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

assumeTrue 和 assumFalse 确保给定的条件为 true 或 false,不满足条件会使得测试执行终止。assumingThat 的参数是表示条件的布尔值和对应的 Executable 接口的实现对象。只有条件满足时,Executable 对象才会被执行;当条件不满足时,测试执行并不会终止。


5、嵌套测试


JUnit 5 可以通过 Java 中的内部类和@Nested 注解实现嵌套测试,从而可以更好的把相关的测试方法组织在一起。在内部类中可以使用@BeforeEach 和@AfterEach 注解,而且嵌套的层次没有限制。

内层的test可以驱动外层的Before(After)Each/All之类的方法提前/之后运行,外层的不能驱动内层的Before(After)Each/All之类的方法

@DisplayName(“前置条件”)

public class Test

{

Stack stack;

@org.junit.jupiter.api.Test

@DisplayName(“is instantiated with new Stack()”)

void isInstantiatedWithNew() {

new Stack<>();

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

SpringBoot2---单元测试(Junit5)(1),程序员,单元测试,log4j

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

[外链图片转存中…(img-hOm90Q92-1713310659917)]

[外链图片转存中…(img-xlEYIGAO-1713310659917)]

[外链图片转存中…(img-je8P7DIU-1713310659917)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-861651.html

到了这里,关于SpringBoot2---单元测试(Junit5)(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot项目使用Junit5 + mockito + jacoco 实现单元测试以及代码覆盖率检查

    在创建springboot项目时会默认添加spring-boot-starter-test依赖,其中已经包含了junit、mockito依赖,根据springboot版本的不同junit和mockito的版本也会有所不同 先说一下各自功能: junit只说一点,junt4和junit5的注解不同,使用方式略有差异,其他不赘述了,基本用法都懂。 mockito是mock的

    2023年04月23日
    浏览(58)
  • 单元测试框架——Junit5

    Junit是一个开源的用于Java语言的单元测试框架,也是Java方向使用最广泛的单元测试框架。 在pom.xml中引入Junit5相关依赖 @Test :表示一个方法/用例 BeforeEach :表示被注解的方法在其它所有方法执行前都要执行一遍,也就是说其它方法有3个它就要执行3遍 @BeforeAll :表示被注解的

    2024年02月11日
    浏览(44)
  • Junit5单元测试框架详解

    前面我们学习了Selenium自动化测试框架,但是有的时候测试用例会很多,我们需要一个工具来管理这些测试用例,而Junit就是一个很好的管理工具,简单点来说,Junit就是一个针对Java的单元测试框架; 目录 一. 关于Junit5 二. Junit使用 2.1 添加Maven依赖 2.2 注解 2.3 断言 2.4 套件

    2024年02月06日
    浏览(49)
  • JUnit5-单元测试操作详解

    JUnit 5是JUnit测试框架的下一个主要版本,用于编写和运行单元测试。 与以前版本的 JUnit 不同,JUnit 5 由来自三个不同子项目的多个不同模块组成。 JUnit 5 =  JUnit 平台 +  JUnit Jupiter  +  JUnit Vintage JUnit 平台 是在 JVM 上启动测试框架的基础。它还定义了 TestEngine 用于开发在平台

    2024年04月10日
    浏览(52)
  • 【单元测试】如何使用 JUnit5 框架?

      Junit5是一个用于在Java平台上进行单元测试的框架。JUnit 5 框架主要由三部分组成:JUnit Platform、JUnit Jupiter 和 JUnit Vintage。 JUnit Platform:定义了测试引擎的 API,是 JVM 上用于启动测试框架的基础服务,支持通过 IDE、构建工具、命令行等方式运行单元测试。 JUnit Jupiter:包含

    2024年04月10日
    浏览(46)
  • Junit5+Mockito单元测试详解

    1.宏观层面:AIR原则 A:Automatic(自动化) 全自动执行,输出结果无需人工检查,而是通过断言验证。 I:Independent(独立性) 分层测试,各层之间不相互依赖。 R:Repeatable(可重复) 可重复执行,不受外部环境( 网络、服务、中间件等)影响。 2.微观层面:BCDE原则 B: Bord

    2024年01月17日
    浏览(48)
  • 单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 单元测试 junit各版本 使用介绍 官

    2023年04月16日
    浏览(44)
  • 深度揭秘JUnit5与Mockito的单元测试神秘面纱

    在今天的学习中,我们将深入研究 JUnit 和Mockito,这是 Java 开发中最强大的 单元测试 工具之一。通过学习如何编写清晰、高效的单元测试,我们将揭开单元测试的神秘面纱,助力你在项目中写出更健壮的代码。 提示: 今天的代码是在第九天代码的基础上进行开发,我们将为

    2024年02月02日
    浏览(58)
  • 在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 2.1 单元测试的基本概念和原理 单元测试是一种测试方法,用于对软件系统中的最

    2024年02月03日
    浏览(45)
  • Spring Cloud中Controller单元测试 Junit5 & MockMvc

    在Spring Cloud中进行Controller的单元测试,使用Junit5和Mock。 Controller: 方式一:使用@SpringBootTest + @AutoConfigureMockMvc 方式二:使用@WebMvcTest + @ImportAutoConfiguration(RefreshAutoConfiguration.class) 解决 No Scope registered for scope name \\\'refresh\\\' 异常 注入Mockmvc方式有两种 方式一:(@AutoConfigureMockMvc / @

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包