具有 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;