• Spring对JUnit的支持


    junit4

    pom.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.powernode</groupId>
    7. <artifactId>spring6-junit</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <packaging>jar</packaging>
    10. <dependencies>
    11. <!--spring context依赖-->
    12. <dependency>
    13. <groupId>org.springframework</groupId>
    14. <artifactId>spring-context</artifactId>
    15. <version>6.0.0-M2</version>
    16. </dependency>
    17. <!--spring对junit的支持相关依赖-->
    18. <dependency>
    19. <groupId>org.springframework</groupId>
    20. <artifactId>spring-test</artifactId>
    21. <version>6.0.0-M2</version>
    22. </dependency>
    23. <!--junit4依赖-->
    24. <dependency>
    25. <groupId>junit</groupId>
    26. <artifactId>junit</artifactId>
    27. <version>4.13.2</version>
    28. <scope>test</scope>
    29. </dependency>
    30. </dependencies>
    31. <properties>
    32. <maven.compiler.source>17</maven.compiler.source>
    33. <maven.compiler.target>17</maven.compiler.target>
    34. </properties>
    35. </project>

    spring.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    7. <context:component-scan base-package="com.powernode.spring6.bean"/>
    8. </beans>

    单元测试

    1. package com.spring6.test;
    2. import com.powernode.spring6.bean.User;
    3. import org.junit.Test;
    4. import org.junit.runner.RunWith;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.test.context.ContextConfiguration;
    7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    8. @RunWith(SpringJUnit4ClassRunner.class)
    9. @ContextConfiguration("classpath:spring.xml")
    10. public class SpringJUnit4Test {
    11. @Autowired
    12. private User user;
    13. @Test
    14. public void testUser(){
    15. System.out.println(user.getName());
    16. }
    17. }

    Spring提供的几个注解:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:spring.xml")

    在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired。比较方便。

    @ContextConfiguration("classpath:spring.xml") 

    代替 

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

     
    

    在 Spring 中,`@RunWith(SpringJUnit4ClassRunner.class)` 注解的作用是告诉 JUnit 使用 Spring 提供的测试运行器来执行测试方法。

    SpringJUnit4ClassRunner 是 JUnit 的一个扩展类,它提供了对 Spring TestContext Framework 的集成支持。使用这个运行器,可以方便地在测试方法中使用 Spring 的功能,如自动注入依赖、加载 Spring 配置文件、创建 Spring 容器等。

    具体来说,`@RunWith(SpringJUnit4ClassRunner.class)` 的作用包括:

    1. 在测试类中创建 Spring 的应用上下文(ApplicationContext)。
    2. 自动将测试类中的依赖注入(Dependency Injection)到被测试的对象中。
    3. 执行测试方法前后,执行 Spring 的相关初始化和销毁操作。
    4. 提供了访问 Spring 上下文和相关功能的便捷方法,如获取 Bean、执行事务等。

    通过使用 `@RunWith(SpringJUnit4ClassRunner.class)` 注解,可以让测试类与 Spring 进行集成,使得测试过程中能够充分利用 Spring 提供的依赖注入和其他功能,方便进行单元测试和集成测试。

     

     

    JUnit5

    pom.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.powernode</groupId>
    7. <artifactId>spring6-015-junit</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <packaging>jar</packaging>
    10. <dependencies>
    11. <!--spring context依赖-->
    12. <dependency>
    13. <groupId>org.springframework</groupId>
    14. <artifactId>spring-context</artifactId>
    15. <version>6.0.0-M2</version>
    16. </dependency>
    17. <!--spring对junit的支持相关依赖-->
    18. <dependency>
    19. <groupId>org.springframework</groupId>
    20. <artifactId>spring-test</artifactId>
    21. <version>6.0.0-M2</version>
    22. </dependency>
    23. <!--junit5依赖-->
    24. <dependency>
    25. <groupId>org.junit.jupiter</groupId>
    26. <artifactId>junit-jupiter</artifactId>
    27. <version>5.9.0</version>
    28. <scope>test</scope>
    29. </dependency>
    30. </dependencies>
    31. <properties>
    32. <maven.compiler.source>17</maven.compiler.source>
    33. <maven.compiler.target>17</maven.compiler.target>
    34. </properties>
    35. </project>
    1. package com.spring6.test;
    2. import com.powernode.spring6.bean.User;
    3. import org.junit.jupiter.api.Test;
    4. import org.junit.jupiter.api.extension.ExtendWith;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.test.context.ContextConfiguration;
    7. import org.springframework.test.context.junit.jupiter.SpringExtension;
    8. @ExtendWith(SpringExtension.class)
    9. @ContextConfiguration("classpath:spring.xml")
    10. public class SpringJUnit5Test {
    11. @Autowired
    12. private User user;
    13. @Test
    14. public void testUser(){
    15. System.out.println(user.getName());
    16. }
    17. }

     

    `@RunWith(SpringJUnit4ClassRunner.class)` 和 `@ExtendWith(SpringExtension.class)` 都是用于在测试中将 Spring TestContext Framework 集成到 JUnit 中,实现与 Spring 的整合。它们的作用有以下区别:

    1. JUnit 版本:`@RunWith(SpringJUnit4ClassRunner.class)` 是针对 JUnit 4.x 的注解,而 `@ExtendWith(SpringExtension.class)` 是针对 JUnit 5.x 的注解。因此,选择注解的依据是所使用的 JUnit 版本。

    2. 注解类型:`@RunWith(SpringJUnit4ClassRunner.class)` 是使用 JUnit 的运行器(Runner)模型进行扩展,而 `@ExtendWith(SpringExtension.class)` 是使用 JUnit 5 的扩展模型进行扩展。JUnit 5 的扩展模型提供了更灵活的扩展机制,并与 Java 8+ 的新特性更好地集成。

    3. 导入依赖:使用 `@RunWith(SpringJUnit4ClassRunner.class)` 需要导入 JUnit 4.x 和 Spring Test 相关的依赖,而使用 `@ExtendWith(SpringExtension.class)` 需要导入 JUnit 5.x 和 Spring Test 相关的依赖。根据所使用的 JUnit 版本选择相应的依赖。

    总的来说,选择使用 `@RunWith(SpringJUnit4ClassRunner.class)` 还是 `@ExtendWith(SpringExtension.class)` 取决于所使用的 JUnit 版本。在使用 JUnit 5.x 的情况下,建议使用 `@ExtendWith(SpringExtension.class)` 注解来实现 Spring 的整合。

     

  • 相关阅读:
    springboot整合redis-sentinel哨兵模式集群(一)
    List集合
    猿创征文| Unity之C#高级开发①
    记一次jenkins发送邮件报错 一直报错 Could not send email as a part of the post-build publishers问题
    微信每天被加上限是多少?
    国庆10.1
    Sublime Text 下载和安装教程
    如何减少const的传染性?
    《Java并发编程之美》读书笔记——ThreadLocalRandom类原理剖析
    数据结构与算法笔记七(暴力递归到动态规划)
  • 原文地址:https://blog.csdn.net/weixin_41812346/article/details/131145552