Java注释 - 代码简化

时间:2014-07-09 12:31:58

标签: java spring testing annotations spring-test

我正在寻找一种简化以下代码的方法。

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        // My configuration classes
})
public class MyServiceTest {
    @Autowired
    private MyService service;

    @Test
    public void myTest() {
        Assert.assertTrue(service != null);
    }
}

我有很多配置类,我不想把它们放到每个测试类中。所以我有了创建自己的注释的想法:

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        // My configuration classes
})
public @interface IntegrationTests {
}

我尝试以下列方式使用它:

@IntegrationTests
public class MyServiceTest {
    @Autowired
    private MyService service;

    @Test
    public void myTest() {
        Assert.assertTrue(service != null);
    }
}

但它不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:7)

您可以将这些注释放在超类上:

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        // My configuration classes
})
public abstract class AbstractIntegrationTest { ... }

public class MyServiceTest extends AbstractIntegrationTest { ... }

此方法还允许您在基类中声明常见的@Autowired依赖项,并在具体测试中自定义@ContextConfiguration类。

答案 1 :(得分:7)

您的自定义组合注释不起作用的原因是JUnit不支持@RunWith作为元注释。因此,当您按照以下方式撰写注释时......

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { /* configuration classes */ })
public @interface IntegrationTests {
}

... JUnit 无法看到您要使用SpringJUnit4ClassRunner

Spring Framework 4.0及更高版本应该可以看到@WebAppConfiguration@ContextConfiguration的声明用作元注释。

换句话说,以下内容适用于您:

@WebAppConfiguration
@ContextConfiguration(classes = { /* configuration classes */ })
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface IntegrationTests {
}

@RunWith(SpringJUnit4ClassRunner.class)
@IntegrationTests
public class MyServiceTest {
    @Autowired
    private MyService service;

    @Test
    public void myTest() {
        assertNotNull(service);
    }
}

作为替代方案,您可以使用axtavt建议的abstract基础测试类。

此致

Sam(Spring TestContext Framework的作者)