Spring对JUnit的支持

junit4

pom.xml



    4.0.0

    com.powernode
    spring6-junit
    1.0-SNAPSHOT
    jar

    

    
        
        
            org.springframework
            spring-context
            6.0.0-M2
        
        
        
            org.springframework
            spring-test
            6.0.0-M2
        
        
        
            junit
            junit
            4.13.2
            test
        
    

    
        17
        17
    

spring.xml



    

单元测试:

package com.spring6.test;

import com.powernode.spring6.bean.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


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

    @Autowired
    private User user;

    @Test
    public void testUser(){
        System.out.println(user.getName());
    }
}

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



    4.0.0

    com.powernode
    spring6-015-junit
    1.0-SNAPSHOT
    jar

    

    
        
        
            org.springframework
            spring-context
            6.0.0-M2
        
        
        
            org.springframework
            spring-test
            6.0.0-M2
        
        
        
            org.junit.jupiter
            junit-jupiter
            5.9.0
            test
        
    

    
        17
        17
    

package com.spring6.test;

import com.powernode.spring6.bean.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;


@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJUnit5Test {

    @Autowired
    private User user;

    @Test
    public void testUser(){
        System.out.println(user.getName());
    }
}

 

`@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 的整合。

 

你可能感兴趣的:(junit,spring,java)