目录
- 前言
- [1. 单元测试的测试类](#1. 单元测试的测试类)
- [2. 框架测试的测试类](#2. 框架测试的测试类)
前言
在实际开发中,如果只是做一个简单的单元测试(不涉及端到端、数据库交互、API调用、消息队列处理等),我为了方便一般都是找块儿地方写一个main方法来跑一下就行了,当然不推荐这样做,怕被领导发现 。所以还是建议在 /src/test/xxx/ 目录下写一个测试类来做测试。
1. 单元测试的测试类
如果只是为了做一个单元测试,比如说测试一个方法是否能正常跑,那么可以按照以下流程创建一个:
-
maven依赖
xml<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
-
测试类
javaimport org.junit.Test; public class MyTest { @Test public void test() { long l = System.currentTimeMillis(); System.out.println(l); } }
要求:
- 测试类中的方法需要加上
@Test
; - 访问修饰符必须是
public
,返回类型必须是void
; - 不接受任何参数(JUnit5可以用
@ParameterizedTest
来实现参数化测试,但是很麻烦); - 可用expected来标注需要捕获的异常
@Test(expected = ExceptionType.class)
。
2. 框架测试的测试类
如果需要启动所有上下文进行测试,那么在测试类上面加一个@SpringBootTest
就行了,接着就可以使用Bean做测试了,如下:
java
@SpringBootTest
public class ConfEncTest {
@Autowired
private StringEncryptor jasyptStringEncryptor;
@Test
public void encryptTest() {
String originPassord = "123456";
String encryptStr = jasyptStringEncryptor.encrypt( originPassord );
System.out.println(encryptStr);
}
}
@SpringBootTest
:启动一个全功能的Spring Boot应用上下文来进行集成测试,可以使用所有的Bean。启动一个测试方法就相当于启动整个项目,比较慢。
如果只是使用几个Bean,那么可以使用 @RunWith(SpringRunner.class)
+ @ContextConfiguration
java
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {StringEncryptor.class})
public class ConfEncTest {
@Autowired
private StringEncryptor jasyptStringEncryptor;
@Test
public void encryptTest() {
String originPassord = "123456";
String encryptStr = jasyptStringEncryptor.encrypt( originPassord );
System.out.println(encryptStr);
}
}
@RunWith
:用于指定运行测试类的测试运行器(Test Runner),需要搭配@ContextConfiguration使用。
SpringRunner
: Spring提供的一个特殊的测试运行器,它负责解析@SpringBootTest、@ContextConfiguration等Spring相关的注解,并在测试执行前创建和配置Spring应用上下文。
@ContextConfiguration
:指定包含所需Bean定义的配置类或XML配置文件。这样,SpringRunner在运行测试时,会根据@ContextConfiguration提供的信息来创建一个包含必要Bean的ApplicationContext,从而实现对这些依赖的注入。如果需要同时指定多个类可以这样写:@ContextConfiguration(classes = {ConfigA.class, ConfigB.class, ConfigC.class})。
@SpringBootTest是一个复合注解,其中包含了@RunWith。