整理使用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 应用上下文。