具有 Spring 个自动装配元素的 Junit 套件
Junit Suites with Spring autowired elements
我有一组带有自动装配元素 (Spring) 的 Junit 测试 classes。如果我分别执行每个 Junit 测试 class,一切正常。
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class TestClass {
@Autowired
MyController control;
@Test
public void geolocTest() throws Exception {
...
}
我想创建一个 "Test Suite",但是如果我执行测试套件,看起来自动装配的元素是 "null",所以每个测试都会失败。
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestClass.class
})
public class TestSuit extends TestCase {
...
}
我能做什么?谢谢
注意:
我想要的是在所有测试 classes 之前执行一段代码,在所有测试 classes 之后执行另一段代码。我想我需要一个套件...
您至少缺少以下内容
@RunWith(SpringJUnit4ClassRunner.class)
在你的测试类上。
如前所述,您应该使用:
@RunWith(SpringJUnit4ClassRunner.class)
您可以使用@Before、@After、@BeforeClass、@AfterClass。
前两个将在给定测试中的每个测试用例之前和之后执行 class。
每个给定的测试只执行一次最后两个 class。
你的测试应该尽可能是原子的,所以如果你的所有测试用例都相互依赖于相同的数据或执行顺序,请先尝试重写它。
如果您希望共享一些应用程序属性,这是一件好事,可以在所有测试用例之间自动连接,例如模拟的 url,请查看 Spring 配置文件。
然后您可以拥有生产特定和测试特定的属性,这些属性将根据当前配置文件注入。
看看例子和官方文档:
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
http://www.mkyong.com/spring/spring-profiles-example/
@Configuration
@ComponentScan
@Profile("test")
@PropertySource(value = "classpath:/yourApp.properties")
public class TestConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
然后您可以从测试文件中注入共享属性 classes,如下所示:
@Value("${mock.url}")
private String mockUrl;
我有一组带有自动装配元素 (Spring) 的 Junit 测试 classes。如果我分别执行每个 Junit 测试 class,一切正常。
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class TestClass {
@Autowired
MyController control;
@Test
public void geolocTest() throws Exception {
...
}
我想创建一个 "Test Suite",但是如果我执行测试套件,看起来自动装配的元素是 "null",所以每个测试都会失败。
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestClass.class
})
public class TestSuit extends TestCase {
...
}
我能做什么?谢谢
注意: 我想要的是在所有测试 classes 之前执行一段代码,在所有测试 classes 之后执行另一段代码。我想我需要一个套件...
您至少缺少以下内容
@RunWith(SpringJUnit4ClassRunner.class)
在你的测试类上。
如前所述,您应该使用:
@RunWith(SpringJUnit4ClassRunner.class)
您可以使用@Before、@After、@BeforeClass、@AfterClass。
前两个将在给定测试中的每个测试用例之前和之后执行 class。
每个给定的测试只执行一次最后两个 class。
你的测试应该尽可能是原子的,所以如果你的所有测试用例都相互依赖于相同的数据或执行顺序,请先尝试重写它。
如果您希望共享一些应用程序属性,这是一件好事,可以在所有测试用例之间自动连接,例如模拟的 url,请查看 Spring 配置文件。
然后您可以拥有生产特定和测试特定的属性,这些属性将根据当前配置文件注入。
看看例子和官方文档:
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
http://www.mkyong.com/spring/spring-profiles-example/
@Configuration
@ComponentScan
@Profile("test")
@PropertySource(value = "classpath:/yourApp.properties")
public class TestConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
然后您可以从测试文件中注入共享属性 classes,如下所示:
@Value("${mock.url}")
private String mockUrl;