【单元测试】如何使用 JUnit5 框架?

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

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

JUnit5 单元测试框架使用教程

一、Junit5 是什么?

  Junit5是一个用于在Java平台上进行单元测试的框架。JUnit 5 框架主要由三部分组成:JUnit Platform、JUnit Jupiter 和 JUnit Vintage。

  • JUnit Platform:定义了测试引擎的 API,是 JVM 上用于启动测试框架的基础服务,支持通过 IDE、构建工具、命令行等方式运行单元测试。
  • JUnit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要用于编写和扩展测试代码。
  • JUnit Vintage:兼容运行 JUnit 3 和 JUnit4 编写的测试用例。

二、Junit5 的注解

(一)导入依赖

  导入五个依赖:

   <!--  junit-jupiter-api 里有 @BeforeAll……等注解  -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.0</version>
        </dependency>
            
        <!--   junit-jupiter-params 里有 @ValueSource……等注解    -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.10.0</version>
        </dependency>
            
        <!--    用于运行 识别上述注解    -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>

        <!-- 测试套件  -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite-api</artifactId>
            <version>1.10.0</version>
        </dependency>
            
        <!-- 运行测试套件的测试引擎-->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite-engine</artifactId>
            <version>1.10.0</version>
            <scope>test</scope>
        </dependency>

(二)常用的注解

如果你的IDEA在使用JUnit注解的时候发生如下情况:依赖已经导入且加载完成,但是IDEA没能识别出来,如图:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

有的注解也在params包中。

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

(我真的不理解为啥)

有一种解决办法:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

点击后,选择相应的版本,我这里是5.10.0,点了之后IDEA就能识别出来了。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

1.@Test
public class JUnitTest {

    @Test
    void test0(){
        System.out.println("测试用例1");
    }

    @Test
    void test1(){
        System.out.println("测试用例2");
    }

    @Test
    void test2(){
        System.out.println("测试用例3");
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

2.@BeforeAll、@AfterAll
  • @BeforeAll:表示被注解的方法应该在当前类的所有@Test,@RepeatedTest,@ParameterizedTest和@TestFactory方法之前执行;
  • @AfterAll:表示被注解的方法应该在当前类的所有@Test,@RepeatedTest,@ParameterizedTest和@TestFactory方法之后执行;

使用@BeforeAll@AfterAll注解的方法要加上static

public class JUnitTest {
    @BeforeAll
    static void beforeAll(){
        //可以用于创建一些资源
        System.out.println("我是BeforeAll,我最开始执行。");
    }
    @AfterAll
    static void afterAll(){
        //可以用于释放资源
        System.out.println("我是AfterAll,我最后执行。");
    }
    @Test
    void test0(){
        System.out.println("测试用例1");
    }
    @Test
    void test1(){
        System.out.println("测试用例2");
    }
    @Test
    void test2(){
        System.out.println("测试用例3");
    }
}

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

3.@BeforeEach、@AfterEach
  • @BeforeEach:表示被注解的方法应在当前类的每个@Test,@RepeatedTest,@ParameterizedTest或@TestFactory方法之前执行;
  • @AfterEach:表示被注解的方法应在当前类的每个@Test,@RepeatedTest,@ParameterizedTest或@TestFactory方法之后执行;
public class JUnitTest {
    @BeforeAll
    static void beforeAll(){
        System.out.println("我是BeforeAll,我最开始执行。");
    }
    @AfterAll
    static void afterAll(){
        System.out.println("我是AfterAll,我最后执行。");
    }
    @BeforeEach
    void beforeEach(){
        System.out.println("我是BeforeEach,我在每个 @Test 前执行。");
    }
    @AfterEach
    void afterEach(){
        System.out.println("我是AfterEach,我在每个 @Test 后执行。");
    }
    @Test
    void test0(){
        System.out.println("测试用例1");
    }
    @Test
    void test1(){
        System.out.println("测试用例2");
    }
    @Test
    void test2(){
        System.out.println("测试用例3");
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

4.@Disabled

  @Disabled用于禁用测试类或测试方法,添加该注解的方法不会被测试。

public class JUnitTest {
    @BeforeAll
    static void beforeAll(){
        System.out.println("我是BeforeAll,我最开始执行。");
    }
    @AfterAll
    static void afterAll(){
        System.out.println("我是AfterAll,我最后执行。");
    }
    @BeforeEach
    void beforeEach(){
        System.out.println("我是BeforeEach,我在每个 @Test 前执行。");
    }
    @AfterEach
    void afterEach(){
        System.out.println("我是AfterEach,我在每个 @Test 后执行。");
    }
    @Test
    @Disabled //忽略测试用例1
    void test0(){
        System.out.println("测试用例1");
    }
    @Test
    void test1(){
        System.out.println("测试用例2");
    }
    @Test
    void test2(){
        System.out.println("测试用例3");
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

(三)参数化测试

1.@ParameterizedTest + @ValueSource

  @ParameterizedTest的作用就是可以用不同的参数多次运行测试。但是必须声调用提供参数的来源(source)。

  @ValueSource它可以让你指定一个原生类型(String,int,long或double)的数组,并且只能为每次调用提供一个参数。

public class JUnitTest {

    @BeforeAll
    static void beforeAll(){
        System.out.println("我是BeforeAll,我最开始执行。");
    }

    @AfterAll
    static void afterAll(){
        System.out.println("我是AfterAll,我最后执行。");
    }

    @BeforeEach
    void beforeEach(){
        System.out.println("我是BeforeEach,我在每个 Test 前执行。");
    }

    @AfterEach
    void afterEach(){
        System.out.println("我是AfterEach,我在每个 Test 后执行。");
    }

    @Test
    void test0(){
        System.out.println("测试用例1");
    }

    @Test
    void test1(){
        System.out.println("测试用例2");
    }

    @Test
    void test2(){
        System.out.println("测试用例3");
    }
    @ParameterizedTest
    @ValueSource(strings = {"小明","小红","小兰"})
    void paramTest(String name){
        System.out.println(name);
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

2.@ParameterizedTest + @CsvSource

  @CsvSource允许将参数列表表示为以逗号分隔的值(例如,字符串文字)。

public class JUnitTest { 
    @ParameterizedTest
    @CsvSource({"小明, 1","小红,2","小兰,3"})
    void csvSource(String name,int id){
        System.out.println(name + ":" + id);
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

@CsvSource使用'作为转义字符。

示例输入 结果字符列表
@CsvSource({ "foo, bar" }) "foo", "bar"
@CsvSource({ "foo, 'baz, qux'" }) "foo", "baz, qux"
@CsvSource({ "foo, ''" }) "foo", ""
@CsvSource({ "foo, " }) "foo", null
3.@ParameterizedTest + @CsvFileSource

  @CsvFileSource让你使用classpath中的CSV文件。CSV文件中的每一行都会导致参数化测试的一次调用。

resources目录下创建csv文件:

test.csv:

小明, 1
小红, 2
"小明, 小红", 3
public class JUnitTest {
    @ParameterizedTest
    @CsvFileSource(resources = "/test.csv")
    void csvFile(String name,int id){
        System.out.println(name + ": " + id);
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

@CsvSource中使用的语法相反,@CsvFileSource使用双引号"作为转义字符。通过上面的代码就可以看出来。一个空的转义值""会产生一个空字符串, 一个完全为空的值被解释为null引用。

4.@ParameterizedTest + @MethodSource

  @MethodSource允许引用一个或多个测试类的工厂方法。

public class JUnitTest {
    @ParameterizedTest
    @MethodSource("stringProvider") //指定方法
    void methodSource(int age,String name){
        System.out.println(age + ": " + name);
    }
    static Stream<Arguments> stringProvider() {
        return Stream.of(
                Arguments.arguments(12,"李四"),
                Arguments.arguments(18,"王五"),
                Arguments.arguments(20,"小红")
        );
    }
}

  @MethodSource注解表示这个方法的参数来源于一个名为stringProvider的静态方法。stringProvider方法返回一个Stream<Arguments>类型的对象,其中每个Arguments对象包含了一组用于测试的参数。

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

(四)测试方法的执行顺序

1.@TestMethodOrder + @Order

  在 JUnit5 中,测试方法执行的顺序是不确定的或者是根据方法首字母来排序的。

public class JUnitTest2 {
    @Test
    void C(){
        System.out.println("A");
    }
    @Test
    void B(){
        System.out.println("B");
    }
    @Test
    void A(){
        System.out.println("C");
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

  让执行顺序为 C、B、A:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JUnitTest2 {
    int a = 0;
    @Test
    @Order(1)
    void C(){
        a++;
        System.out.println(a);
        System.out.println("C");
    }
    @Test
    @Order(2)
    void B(){
        a++;
        System.out.println(a);
        System.out.println("B");
    }
    @Test
    @Order(3)
    void A(){
        a++;
        System.out.println(a);
        System.out.println("A");
    }
}

  首先在类上添加@TestMethodOrder(MethodOrderer.OrderAnnotation.class),然后再为每个方法上添加@Order()注解,值越小越优先被执行。

(五)测试实例的生命周期

1.@TestInstance

  我添加一个成员变量,每次执行测试方法的时候都++一次。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
public class JUnitTest2 {
    int a = 0;

    @Test
    @Order(1)
    void A(){
        a++;
        System.out.println("A方法:" + a);
        System.out.println("A");
    }

    @Test
    @Order(2)
    void B(){
        a++;
        System.out.println("B方法:" + a);
        System.out.println("B");
    }

    @Test
    @Order(3)
    void C(){
        a++;
        System.out.println("C方法:" + a);
        System.out.println("C");
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

  为了允许隔离执行单个的测试方法,JUnit在执行每个测试方法之前会创建每个测试类的新实例。如果想改变策略,就要用@TestInstance,在类上添加@TestInstance(TestInstance.Lifecycle.PER_CLASS)

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class JUnitTest2 {
    int a = 0;

    @Test
    @Order(1)
    void A(){
        a++;
        System.out.println("A方法:" + a);
        System.out.println("A");
    }

    @Test
    @Order(2)
    void B(){
        a++;
        System.out.println("B方法:" + a);
        System.out.println("B");
    }

    @Test
    @Order(3)
    void C(){
        a++;
        System.out.println("C方法:" + a);
        System.out.println("C");
    }
}

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

Lifecycle.PER_CLASS表示只创建一个实例。不添加注解的时候,默认是Lifecycle.PER_METHOD

  当使用这种模式时,每个测试类将创建一个新的测试实例。因此,如果测试方法依赖于存储在实例变量中的状态,则可能需要在@BeforeEach@AfterEach方法中重置该状态(重置变量的值)。

(六)断言 Assertions

断言方法 描述
assertEquals(expected, actual) 检查两个值是否相等,如果不相等则抛出AssertionError
assertNotEquals(expected, actual) 检查两个值是否不相等,如果相等则抛出AssertionError
assertTrue(condition) 检查一个条件是否为真,如果为假则抛出AssertionError
assertFalse(condition) 检查一个条件是否为假,如果为真则抛出AssertionError
assertNull(object) 检查一个对象是否为null,如果不为null则抛出AssertionError
assertNotNull(object) 检查一个对象是否不为null,如果为null则抛出AssertionError
assertSame(expected, actual) 检查两个对象是否是同一个实例,如果不是则抛出AssertionError
assertNotSame(expected, actual) 检查两个对象是否不是同一个实例,如果是则抛出AssertionError
assertArrayEquals(expected, actual) 检查两个数组是否相等,如果不相等则抛出AssertionError
assertTimeout(duration, executable) 检查一个可执行的代码块是否在指定的时间内完成,如果超时则抛出AssertionError
public class JUnitTest3 {
    @Test
    void assertEqualsDemo(){
        int num = 10;
        Assertions.assertEquals(1,num,"不符合预期");
    }
    @Test
    void assertTrueDemo(){
        int num = 10;
        Assertions.assertTrue(num > 10,"不符合预期");
    }
    @Test
    void assertTimeoutDemo(){
        int num = 10;
        Assertions.assertTimeout(Duration.ofSeconds(3), new Executable() {
            @Override
            public void execute() throws Throwable {
                //代码块
                Thread.sleep(4000);
            }
        });
    }
}
结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

(七)测试套件

  测试套件是一组相关的测试,可以一起运行,以便更方便地组织和管理测试。使用套件要引入两个依赖:junit-platform-suite-apijunit-platform-suite-engine,具体的在文章开头。

  套件其实很好理解,就是使几个类同时进行测试。

1.@SelectClasses
@Suite
@SelectClasses(value = {JUnitTest.class,JUnitTest2.class})
public class RunSuite {

}

@Suite的作用是将一个类标记为JUnit平台上的测试套件。

@SelectClasses指定在JUnit平台上运行测试套件时要选择的类。

运行结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

2.@SelectPackages

  可以选择类,那么也可以包。

@Suite
@SelectPackages(value = {"package1"})
//可以选择多个包:@SelectPackages(value = {"package1","package2","package3"……})
public class RunSuite {

}

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

结果:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

为什么只执行了JUnitTest这一个类?我的JUnitTest2呢?我们来看看它:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

IDEA提示我们它的命名不符合规则,那这个规则是什么意思呢?

3.测试类命名规则
  • [A-Z[A-Za-z\d]*Test(s|Case)?:表示以大写字母开头,后面跟任意个字母或数字,最后以Test, Tests, TestCase结尾的字符串,例如MyTest, MyTests, MyTestCase等。
  • Test[A-Z[A-Za-z\d]*:表示以Test开头,后面跟一个大写字母,再后面跟任意个字母或数字的字符串,例如TestMyClass, TestMyMethod等。
  • IT(.*):表示以IT开头,后面跟任意个任意字符的字符串,例如ITMyClass, ITMyMethod等。
  • (.*)IT(Case)?:表示以任意个任意字符开头,后面跟IT或者ITCase的字符串,例如MyClassIT, MyMethodITCase等。

其实就是我们的类命名不规范导致框架识别不出来。改类名后:

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试

junit-jupiter,软件测试,技术分享,自动化测试,单元测试,log4j,自动化测试,测试工程师,软件测试,压力测试文章来源地址https://www.toymoban.com/news/detail-846642.html

到了这里,关于【单元测试】如何使用 JUnit5 框架?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

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

    2023年04月16日
    浏览(43)
  • 在 Java 中使用JUnit5进行单元测试和自动化测试

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

    2024年02月03日
    浏览(45)
  • spring boot 单元测试JUnit5使用Mockito模拟Mock数据调用

    spring boot 单元测试JUnit5使用Mockito模拟Mock数据调用 好大一批新用法,大家静下心来好好看看吧 1. spring boot 使用 Mockito.when().thenReturn()模拟返回值 Mockito 是一种 Java mock 框架,他主要就是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常…

    2024年02月15日
    浏览(58)
  • spring boot 单元测试JUnit5使用断言Assertions和假定Assumptions、嵌套、参数测试

    spring boot 单元测试JUnit5使用断言Assertions和假定Assumptions、嵌套、参数测试 本文基于spirng boot 2.7.11, 大家注意自己的版本 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖 源码地址:https://gitcode.net/qq_39339588/springboot.git 1.

    2024年02月11日
    浏览(48)
  • 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 5是JUnit测试框架的下一个主要版本,用于编写和运行单元测试。 与以前版本的 JUnit 不同,JUnit 5 由来自三个不同子项目的多个不同模块组成。 JUnit 5 =  JUnit 平台 +  JUnit Jupiter  +  JUnit Vintage JUnit 平台 是在 JVM 上启动测试框架的基础。它还定义了 TestEngine 用于开发在平台

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

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

    2024年01月17日
    浏览(48)
  • SpringBoot2---单元测试(Junit5)(1)

    org.junit.vintage junit-vintage-engine test org.hamcrest hamcrest-core org.springframework.boot spring-boot-starter-test test 现在版本: @SpringBootTest class Boot05WebAdminApplicationTests { @Test void contextLoads() { } } 以前: @SpringBootTest + @RunWith(SpringRunner.class) SpringBoot整合Junit以后。 编写测试方法:@Test标注(注意需要

    2024年04月29日
    浏览(43)
  • 13.Springboot整合junit5单元测试与生成单元测试覆盖率

    现在基本大公司都要求单元测试了,保证我们代码得质量,而我司更是要求覆盖率要达到60%以上,所以搞一下。 这里有两个方法: 1.使用maven自带得test,idea右侧maven模块执行项目下得test 2.使用cmd命令,在你的项目pom文件所在目录 ,打开cmd,执行如下: 结果如下:打开site文

    2024年02月16日
    浏览(39)
  • 静态方法 单元测试 springboot+mokito+junit5

    CodecUtils的方法是静态类,使用@InjectMocks不能有用,因为这个注解只能用于非静态的对象。 想要为静态方法写单元测试,可以使用Mockito.mockStatic(Class classToMock)方法,它可以返回一个MockedStatic对象,用于模拟静态方法的调用。 1.导入依赖 2.单元测试 可以参考如下地址,了解如何

    2024年04月25日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包