带有Spring自动元素的Junit套件

时间:2015-05-02 06:24:44

标签: java spring junit

我有一个带有自动元素(Spring)的Junit测试类的集合。如果我单独执行每个Junit测试类,一切正常。

@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class TestClass {

@Autowired
MyController control;

@Test
public void geolocTest() throws Exception {
...
}

我想创建一个“测试套件”,但是如果我执行测试套件,看起来自动装配的元素是“空”,所以每次测试都会失败。

@RunWith(Suite.class)
@Suite.SuiteClasses({
        TestClass.class
})
public class TestSuit extends TestCase {
...
}

我该怎么办?感谢

注意: 我想要的是在所有测试类之前执行代码,在所有测试类之后执行另一个代码。我想我需要一个套房......

2 个答案:

答案 0 :(得分:1)

如上所述,您应该使用:

@RunWith(SpringJUnit4ClassRunner.class)

你可以使用@ Before,@ After,@ ByClass,@ AfterClass。

前两个将在给定Test类中的每个测试用例之前和之后执行。

每个给定的Test类只执行一次最后两次。

您的测试应该尽可能原子化,因此如果所有测试用例都相互依赖于相同的数据或执行顺序,请尝试先重写它。

如果您希望共享一些应用程序属性,那么对于所有测试用例之间的自动连接(例如模拟的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();
    }

}

然后,您可以从测试类中的文件中注入共享属性,如下所示:

@Value("${mock.url}")
private String mockUrl;

答案 1 :(得分:0)

您至少缺少以下

@RunWith(SpringJUnit4ClassRunner.class)

在你的TestClass上。