静态方法 单元测试 springboot+mokito+junit5

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

CodecUtils的方法是静态类,使用@InjectMocks不能有用,因为这个注解只能用于非静态的对象。

想要为静态方法写单元测试,可以使用Mockito.mockStatic(Class classToMock)方法,它可以返回一个MockedStatic对象,用于模拟静态方法的调用。

1.导入依赖

<dependency>
   <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.1.18.RELEASE</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>


<dependency> 
    <groupId>org.mockito</groupId>     
    <artifactId>mockito-junit-jupiter</artifactId> 
    <version>5.3.1</version> 
    <scope>test</scope>
 </dependency> 


<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>4.1.0</version>
    <scope>test</scope>
</dependency>


<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.1.0</version>
    <scope>test</scope>
</dependency>
           

2.单元测试

import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

class CodecUtilsTest {

    @Test
    void testBytesToBinary() {
        byte[] bytes = {1, 2, 3};
        String expected = "000000010000001000000011";
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.bytesToBinary(bytes)).thenReturn(expected);
            String actual = CodecUtils.bytesToBinary(bytes);
            assertEquals(expected, actual);
            mocked.verify(() -> CodecUtils.bytesToBinary(bytes));
        }
    }

    @Test
    void testBinaryToBytes() {
        String binary = "000000010000001000000011";
        byte[] expected = {1, 2, 3};
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.binaryToBytes(binary)).thenReturn(expected);
            byte[] actual = CodecUtils.binaryToBytes(binary);
            assertArrayEquals(expected, actual);
            mocked.verify(() -> CodecUtils.binaryToBytes(binary));
        }
    }

    @Test
    void testBytesToHex() {
        byte[] bytes = {1, 2, 3};
        String expected = "010203";
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.bytesToHex(bytes)).thenReturn(expected);
            String actual = CodecUtils.bytesToHex(bytes);
            assertEquals(expected, actual);
            mocked.verify(() -> CodecUtils.bytesToHex(bytes));
        }
    }

    @Test
    void testHexToBytes() throws Exception {
        String hex = "010203";
        byte[] expected = {1, 2, 3};
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.hexToBytes(hex)).thenReturn(expected);
            byte[] actual = CodecUtils.hexToBytes(hex);
            assertArrayEquals(expected, actual);
            mocked.verify(() -> CodecUtils.hexToBytes(hex));
        }
    }

    @Test
    void testBytesToDecimal() {
        byte[] bytes = {1, 2, 3};
        String expected = "66051";
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.bytesToDecimal(bytes)).thenReturn(expected);
            String actual = CodecUtils.bytesToDecimal(bytes);
            assertEquals(expected, actual);
            mocked.verify(() -> CodecUtils.bytesToDecimal(bytes));
        }
    }

    @Test
    void testDecimalToBytes() {
        String decimal = "66051";
        byte[] expected = {1, 2, 3};
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.decimalToBytes(decimal)).thenReturn(expected);
            byte[] actual = CodecUtils.decimalToBytes(decimal);
            assertArrayEquals(expected, actual);
            mocked.verify(() -> CodecUtils.decimalToBytes(decimal));
        }
    }

    @Test
    void testBytesToAscii() {
        byte[] bytes = {65, 66, 67};
        String expected = "ABC";
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.bytesToAscii(bytes)).thenReturn(expected);
            String actual = CodecUtils.bytesToAscii(bytes);
            assertEquals(expected, actual);
            mocked.verify(() -> CodecUtils.bytesToAscii(bytes));
        }
    }

    @Test
    void testAsciiToBytes() {
        String ascii = "ABC";
        byte[] expected = {65, 66, 67};
        try (MockedStatic<CodecUtils> mocked = Mockito.mockStatic(CodecUtils.class)) {
            mocked.when(() -> CodecUtils.asciiToBytes(ascii)).thenReturn(expected);
            byte[] actual = CodecUtils.asciiToBytes(ascii);
            assertArrayEquals(expected, actual);
            mocked.verify(() -> CodecUtils.asciiToBytes(ascii));
        }
    }
}

可以参考如下地址,了解如何使用Mockito.mockStatic方法。
① Mocking Static Methods With Mockito | Baeldung.
另外,可以使用PowerMockito工具来模拟静态方法,但是它需要额外的配置和依赖。可以查看如下回答。
② java - Mockito InjectMocks into static object - Stack Overflow.
③ unit testing - Java Mockito inject a static class - Stack Overflow.文章来源地址https://www.toymoban.com/news/detail-857833.html

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

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

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

相关文章

  • SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

    因为继承了 spring-boot-starter-parent ,所以我们依赖的 spring-boot-starter-test 不需要写具体的版本,可以直接集成父级的版本定义。其中, spring-boot-starter-web 是用于提供 REST API 的 web 容器, spring-boot-starter-test 可以提供各种测试框架的, spring-boot-maven-plugin 是将 SpringBoot 应用打包为

    2024年04月15日
    浏览(52)
  • 如何在 Java 中使用JUnit5进行单元测试和自动化测试

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

    2024年02月05日
    浏览(53)
  • springboot项目使用Junit5 + mockito + jacoco 实现单元测试以及代码覆盖率检查

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

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

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

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

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

    2024年04月10日
    浏览(51)
  • Junit5单元测试框架详解

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

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

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

    2024年01月17日
    浏览(45)
  • 【Junit】单元测试Mock静态方法

    开发依赖 版本 Spring Boot 3.0.6 JDK 20 如果没有引入 mockito-inline 这个依赖,使用mock静态方法,则会抛这个异常

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

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

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

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

    2024年02月02日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包