一文教会你如何在 Spring 中进行集成测试,太赞了

@Component 注解用于为 Spring 容器注入一个通用的 Bean 组件。@Profile 注解用于标识不同环境下要实例化的 Bean,字符串“dev” 表示该组件用于开发环境。

新建 ProdDatasource 类,实现 Datasource 接口,该类用于为正式运行环境配置数据源,内容如下:

@Component

@Profile(“prod”)

public class ProdDatasource implements Datasource {

@Override

public void setup() {

System.out.println(“正式环境”);

}

}

新建配置类 SpringTestConfig,内容如下:

@Configuration

@ComponentScan(“test”)

public class SpringTestConfig {

}

@Configuration 注解表示当前类为一个配置类,@ComponentScan 注解用于指定扫描路径,该路径下的 Bean 将会自动装配到 Spring 容器中。

基于 Maven 构建的项目默认有两个测试目录,src/test/java 和 src/test/resources,分别对应于 src/main/java 和 src/main/resources。前者用于测试项目源码,后者用于测试项目资源。

我们在 src/test/java 目录下新建测试类 DevTest,内容如下:

@RunWith(SpringJUnit4ClassRunner.class)

@ActiveProfiles(“dev”)

@ContextConfiguration(classes = { SpringTestConfig.class })

public class DevTest {

@Autowired

@Test

public void testSpringProfiles() {

Assert.assertTrue(datasource instanceof DevDatasource);

}

}

1)@RunWith 注解用于指定 Junit 运行环境,是 Junit 提供给其他框架测试环境的接口扩展,Spring 提供了 org.springframework.test.context.junit4.SpringJUnit4ClassRunner 作为 Junit 测试环境。

2)@ActiveProfile 注解用于指定哪个配置文件处于活动状态,本例为开发环境“dev”。

3)@ContextConfiguration 注解用于指定配置类,本例为 SpringTestConfig 类。

4)@Autowired 注解用于指定 Spring 要自动装配的 Bean。

5)@Test 注解用于表示当前方法为 Junit 测试方法。

程序运行的结果如下图所示:

再新建一个测试类 ProdTest,内容如下:

@RunWith(SpringJUnit4ClassRunner.class)

@ActiveProfiles(“prod”)

@ContextConfiguration(classes = { SpringTestConfig.class })

public class ProdTest {

@Autowired

Datasource datasource;

@Autowired

Environment environment;

@Test

public void testSpringProfiles() {

for (String profileName : environment.getActiveProfiles()) {

System.out.println("当前激活的 profile - " + profileName);

}

Assert.assertTrue(datasource instanceof ProdDatasource);

}

}

这次使用 @ActiveProfiles("prod") 注解指定当前环境为正式运行下的环境。本例中我们装配了一个新的 Bean environment,使用它的 getActiveProfiles() 方法可以获取当前激活的 Profile。程序运行的结果如下图所示:

经验分享 程序员 微信小程序 职场和发展