集成测试一般需要来自不同层的不同对象的交互,如数据库、网络连接、IOC容器等。
Spring通过Spring TestContext Framework对集成测试提供顶级支持。它不依赖于特定的测试框架,即可使用JUnit,也可使用TestNG。
基于Maven构建的项目默认有关于测试的目录:src/test/java(测试代码)、src/test/resources(测试资源),区别于src/main/java(项目源码)、src/main/resources(项目资源)。
Spring提供了一个SpringJUnit4ClassRunner类,它提供了Spring TestContext Framework的功能。通过@ContextConfiguration来配置Application Context,通过@ActiveProfiles确定活动的profile。
在使用了Spring测试后,我们前面的例子的“运行”部分都可以用Spring测试来检验功能能否正常运作。
示例
1>.在pom.xml中增加Spring测试的依赖
<!-- Spring test 支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-framework.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency>
2>.业务代码(src/main/java)
package com.wisely.highlight_spring4.ch3.fortest; public class TestBean { private String content; public TestBean(String content) { super(); this.content = content; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
3>.配置类(src/main/java)
package com.wisely.highlight_spring4.ch3.fortest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class TestConfig { @Bean @Profile("dev") public TestBean devTestBean() { return new TestBean("from development profile"); } @Bean @Profile("prod") public TestBean prodTestBean() { return new TestBean("from production profile"); } }
4>.测试(src/test/java)
package com.wisely.highlight_spring4.ch3.fortest; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) //SpringJUnit4ClassRunner在JUnit环境下提供Spring TestContext Framework的功能 @ContextConfiguration(classes = {TestConfig.class}) //@ContextConfiguration用来加载配置ApplicationContext,其中classes属性用来加载配置类 @ActiveProfiles("prod") //@ActiveProfiles用来声明活动的profile public class DemoBeanIntegrationTests { @Autowired //可使用普通的@Autowired注入Bean private TestBean testBean; @Test //测试代码,通过JUnit的Assert来校验结果是否和预期一致 public void prodBeanShouldInject(){ String expected = "from production profile"; String actual = testBean.getContent(); Assert.assertEquals(expected, actual); } }
时间: 2024-10-10 14:02:41