常用框架
- JUnit:Java 中最流行的单元测试框架,Spring Boot 项目默认集成 JUnit 5。例如在基于 Spring Boot 的微服务项目的
src/test/java
目录下的测试类中,可使用 JUnit 注解如 @Test
来定义测试方法。
- Mockito:用于创建和管理模拟对象,方便在单元测试中隔离被测试对象与外部依赖。例如,当业务逻辑层依赖其他服务接口时,可使用 Mockito 模拟该接口的行为。
测试环境搭建
- 使用
@SpringBootTest
注解:在测试类上添加 @SpringBootTest
注解,Spring Boot 会启动一个应用上下文,模拟真实的运行环境。例如:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.example.demo.service.BusinessLogicService;
@SpringBootTest
public class BusinessLogicServiceTest {
@Autowired
private BusinessLogicService businessLogicService;
@Test
public void testBusinessLogicMethod() {
// 测试逻辑
}
}
- 配置测试专用的属性:可在
src/test/resources
目录下创建 application.properties
或 application.yml
文件,配置测试环境所需的属性,如数据库连接等,避免影响生产环境配置。
依赖注入处理
- 使用
@MockBean
或 @SpyBean
:
@MockBean
:在使用 @SpringBootTest
的测试类中,对于不需要真实调用的外部依赖(如其他微服务接口、数据库访问层等),可使用 @MockBean
注解创建模拟对象并注入到被测试对象中。例如:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import com.example.demo.dao.OtherDao;
import com.example.demo.service.BusinessLogicService;
@SpringBootTest
public class BusinessLogicServiceTest {
@Autowired
private BusinessLogicService businessLogicService;
@MockBean
private OtherDao otherDao;
@Test
public void testBusinessLogicMethod() {
// 定义模拟行为
Mockito.when(otherDao.someMethod()).thenReturn("mocked result");
// 调用业务逻辑方法并断言
}
}
@SpyBean
:与 @MockBean
类似,但 @SpyBean
会保留真实对象的部分行为,只对指定方法进行模拟。例如,只想模拟部分方法,而其他方法仍使用真实实现时可使用 @SpyBean
。
- 手动注入依赖:对于简单的依赖关系,也可在测试方法中手动创建依赖对象并注入到被测试对象中。例如:
import org.junit.jupiter.api.Test;
import com.example.demo.service.BusinessLogicService;
import com.example.demo.dao.OtherDao;
public class BusinessLogicServiceTest {
@Test
public void testBusinessLogicMethod() {
OtherDao otherDao = new OtherDao();
BusinessLogicService businessLogicService = new BusinessLogicService(otherDao);
// 调用业务逻辑方法并断言
}
}
对业务逻辑层进行单元测试的具体方法
- 测试方法逻辑:针对业务逻辑层的每个方法,设计不同的输入参数组合,测试方法的逻辑正确性。例如,对于一个计算两个数之和的业务方法,测试不同的整数、小数输入情况。
- 异常处理测试:模拟可能出现的异常情况,测试业务逻辑层的异常处理是否正确。比如,业务方法依赖的外部服务抛出异常时,业务逻辑层是否能正确捕获并处理,返回合适的错误信息。
- 边界条件测试:测试业务逻辑在边界条件下的行为,如输入参数的最大值、最小值、空值等情况。例如,对于一个限制输入值在一定范围内的业务方法,测试边界值是否能正确处理。