当前位置: 首页 > article >正文

整理使用Spring、SpringBoot测试的四种注解方式

目录

1. JUnit纯单元测试

代码解释

2. Spring测试框架和JUnit结合(XMl配置)

代码解释

3. Spring测试框架与JUnit结合(注解配置)

代码解释

4. Spring Boot集成测试

代码解释


1. JUnit纯单元测试

        JUnit 是 Java 开发中常用的单元测试框架。当对普通 Java 类进行单元测试且不依赖 Spring 容器时,可直接使用 JUnit 的 @Test 注解。单元测试重点在于验证单个类或方法的功能,要尽量减少对外部依赖的使用。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

// 待测试的类
class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

// 测试类
public class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertEquals(5, result);
    }
}
代码解释
  • @Test 注解标记了 testAdd 方法,表明这是一个测试方法。
  • assertEquals 是 JUnit 提供的断言方法,用于验证计算结果是否符合预期。

2. Spring测试框架和JUnit结合(XMl配置)

        在 Spring 项目中,若要测试依赖 Spring 容器管理的 Bean,可结合 Spring 测试框架和 JUnit 的 @Test 注解。使用 XML 配置文件来定义 Bean。


public class Lojarro {
    private int age;
    private String name;
    private Ioc ioc;

    private String[] strings;
    private List<String> list;
    private Map<String,String> map;
public class Ioc {
    private String name;
    private int age;

 


public class IOCtest {

    @Test
    public void test1(){
        ApplicationContext ac=new ClassPathXmlApplicationContext("Spring.xml");
        Lojarro me=(Lojarro) ac.getBean("lojarro");
        System.out.println(me.toString());

        Ioc i=(Ioc) ac.getBean("ioc");
        System.out.println(i.toString());

    }
}

Spring.xml:

 <bean id="lojarro" class="com.qcby.IOC.Lojarro">
        <property name="age" value="18"/>
        <property name="name" value="Lojarro"/>
        <property name="ioc" ref="ioc"/>
        <property name="strings">
            <array>
                <value>aa</value>
                <value>bb</value>
            </array>
        </property>
        <property name="list">
            <list>
                <value>cc</value>
                <value>dd</value>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="aa" value="Rain"></entry>
                <entry key="cc" value="Rachel"/>
            </map>
        </property>
    </bean>
    <bean id="ioc" class="com.qcby.IOC.Ioc">
        <constructor-arg name="age" value="19"/>
        <constructor-arg name="name" value="IOC"/>
    </bean>

 

代码解释
  • 通过 ClassPathXmlApplicationContext 加载 Spring.xml 配置文件,创建 Spring 应用上下文。
  • 使用 ac.getBean 方法从容器中获取 Lojarro 和 Ioc 实例。

3. Spring测试框架与JUnit结合(注解配置)

        在 Spring 项目中,也可以使用注解来配置 Spring 容器,结合 Spring 测试框架和 JUnit 的 @Test 注解进行测试。

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

// 待测试的类
@Component
class Lojarro {
    @Override
    public String toString() {
        return "Lojarro instance";
    }
}

@Component
class Ioc {
    @Override
    public String toString() {
        return "Ioc instance";
    }
}

// 配置类
@Configuration
@ComponentScan(basePackages = "com.qcby.IOC")
class AppConfig {
}

@SpringJUnitConfig
@ContextConfiguration(classes = AppConfig.class)
public class IOCAnnotationTest {
    @Autowired
    private Lojarro lojarro;

    @Autowired
    private Ioc ioc;

    @Test
    public void test1() {
        System.out.println(lojarro.toString());
        System.out.println(ioc.toString());
    }
}
代码解释
  • @Component 注解将 Lojarro 和 Ioc 类标记为 Spring 组件。
  • @Configuration 注解标记 AppConfig 类为 Spring 配置类,@ComponentScan 注解指定要扫描的包路径。
  • @SpringJUnitConfig 注解启用 Spring 对 JUnit 5 的支持,@ContextConfiguration 注解指定要使用的配置类。
  • @Autowired 注解自动注入 Lojarro 和 Ioc 实例。

4. Spring Boot集成测试

        在 Spring Boot 项目中,若要进行集成测试,即验证多个组件在完整的 Spring Boot 应用上下文中的协同工作情况,可使用 @SpringBootTest 和 @Test 注解。

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

// 假设这是一个 Spring Boot 服务类
@SpringBootTest
public class SpringBootServiceTest {
    @Autowired
    private SomeService someService;

    @Test
    public void testSomeMethod() {
        String result = someService.someMethod();
        // 这里可以添加断言进行结果验证
        System.out.println(result);
    }
}

// 服务类
class SomeService {
    public String someMethod() {
        return "Some Result";
    }
}
代码解释
  • @SpringBootTest 注解会启动完整的 Spring Boot 应用上下文,加载所有的 Bean。
  • @Autowired 注解用于自动注入 SomeService Bean。
  • @Test 注解标记了测试方法。

总结

  • JUnit 纯单元测试:适合对普通 Java 类进行独立的单元测试,不依赖 Spring 容器。
  • Spring 测试框架 + JUnit(XML 配置):适用于使用 XML 配置文件定义 Bean 的 Spring 项目测试。
  • Spring 测试框架 + JUnit(注解配置):适用于使用注解配置 Spring 容器的项目测试。
  • @SpringBootTest + @Test:用于 Spring Boot 项目的集成测试,会加载完整的 Spring Boot 应用上下文。

原文地址:https://blog.csdn.net/m0_75163045/article/details/146451593
http://www.kler.cn/a/600169.html

相关文章:

  • Java Collection API增强功能系列之二 List.of、Set.of、Map.of
  • selenium基本使用(一)
  • 机器学习knnlearn2
  • 水星(MERCURY)监控初始化的恢复和转码方法
  • Numpy 简单学习【学习笔记】
  • 详细讲解css的穿透方法
  • 动态规划~01背包问题
  • 计算机网络层超全解析:从IP协议到路由算法
  • SpringBoot-3-JWT令牌
  • wordpress靶场练习
  • CI/CD(五) 安装helm
  • 基于AWS Endpoint Security(EPS)的全天候威胁检测与响应闭环管理
  • 如何在 React 项目中进行服务器端渲染(SSR),它有什么优势
  • React学习(基础)
  • Ftrans飞驰云联受邀参加“2025汽车零部件CIO年会“并荣获智象奖
  • 安卓应用兼容新方案:Android Translation Layer(ATL)
  • python3面试题20个(python web篇)
  • Flink实战教程从入门到精通(基础篇)(三)Flink集群部署
  • Vue+ElementUI 字符串数组标签化展示组件
  • 07_GRU模型