• (十七)Spring6整合JUnit



    Spring学习目录

    上一篇:(十六)Spring对事务的支持

    下一篇:(十八)Spring6集成MyBatis3.5

    环境

    spring6里程碑版本的仓库
    依赖:spring context依赖、spring对junit的支持相关依赖、junit4依赖、junit5依赖

      <!--配置多个仓库-->
      <repositories>
        <!--spring6里程碑版本的仓库-->
        <repository>
          <id>repository.spring.milestone</id>
          <name>Spring Milestone Repository</name>
          <url>https://repo.spring.io/milestone</url>
        </repository>
      </repositories>
    
      <dependencies>
        <!--spring context依赖-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>6.0.0-M2</version>
        </dependency>
        <!--spring对junit的支持-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <!--这个版本即支持junit4又支持junit5-->
          <version>6.0.0-M2</version>
        </dependency>
        <!--junit4依赖-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13.2</version>
          <scope>test</scope>
        </dependency>
        <!--junit5依赖-->
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter</artifactId>
          <version>5.9.0</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    声明bean:

    @Component("user")
    public class User {
        @Value("张三")
        private String name;
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    '}';
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    spring配置文件

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

    Spring对JUnit4的支持

    传统的单元测试:

    @Test
        public void testUser(){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            User user = applicationContext.getBean("user", User.class);
            System.out.println(user);
        }
    
        @Test
        public void testUser2(){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            User user = applicationContext.getBean("user", User.class);
            System.out.println(user);
        }
        @Test
        public void testUser3(){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            User user = applicationContext.getBean("user", User.class);
            System.out.println(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    我们发现每次单元测试都要new一个ApplicationContext,并且根据getBean获取bean,这显然代码重复,没有得到复用。
    Spring提供的方便主要是这几个注解:
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(配置文件名)
    一般是从类的根路径加载所以写成:
    @ContextConfiguration(“classpath:spring.xml”)
    在单元测试类上使用这两个注解之后,在单元测试类中的属性上可以使用@Autowired。比较方便。
    所以单元测试就变成这样:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:spring.xml")
    public class SpringJunit4Test {
    
        @Autowired
        private User user;
    
        @Test
        public void testUser(){
            /*ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            User user = applicationContext.getBean("user", User.class);*/
            System.out.println(user);
        }
    
        @Test
        public void testUser2(){
            /*ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            User user = applicationContext.getBean("user", User.class);*/
            System.out.println(user);
        }
        @Test
        public void testUser3(){
            /*ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
            User user = applicationContext.getBean("user", User.class);*/
            System.out.println(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    Spring对JUnit5的支持

    在JUnit5当中,可以使用Spring提供的以下两个注解,标注到单元测试类上,这样在类当中就可以使用@Autowired注解了。
    @ExtendWith(SpringExtension.class)
    @ContextConfiguration(“classpath:spring.xml”)

    @ExtendWith(SpringExtension.class)
    @ContextConfiguration("classpath:spring.xml")
    public class SpringJunit5Test {
        @Autowired
        private User user;
        @Test
        public void testUser(){
            System.out.println(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

  • 相关阅读:
    ElementUI浅尝辄止32:NavMenu 导航菜单
    外贸邮箱推荐,提升国际业务沟通效率的5大邮箱
    基于Golang和WebSocket打造自已的反向代理
    VTK学习笔记(十八)指数余弦函数的可视化
    SCA Sentinel 分布式系统的流量防控(二)
    大数据必学Java基础(一百一十一):过滤器注解应用和开发案例
    【408数据结构与算法】—队列的顺序表示和实现(十三)
    全网监控 nginx 部署 zabbix6.0
    lua学习笔记
    【 Maven 】花式玩法之多模块项目
  • 原文地址:https://blog.csdn.net/weixin_45832694/article/details/128063603