use*_*391 2 java testing spring 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我有很多配置类,我不想把它们放到每个测试类中.所以我有了创建自己的注释的想法:
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
// My configuration classes
})
public @interface IntegrationTests {
}
Run Code Online (Sandbox Code Playgroud)
我尝试以下列方式使用它:
@IntegrationTests
public class MyServiceTest {
@Autowired
private MyService service;
@Test
public void myTest() {
Assert.assertTrue(service != null);
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.任何的想法?
您可以将这些注释放在超类上:
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
// My configuration classes
})
public abstract class AbstractIntegrationTest { ... }
Run Code Online (Sandbox Code Playgroud)
.
public class MyServiceTest extends AbstractIntegrationTest { ... }
Run Code Online (Sandbox Code Playgroud)
此方法还允许您@Autowired在基类中声明公共依赖项,并@ContextConfiguration在具体测试中自定义类.
自定义组合注释不起作用的原因是JUnit不支持@RunWith作为元注释.因此,当您按如下方式编写注释时......
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { /* configuration classes */ })
public @interface IntegrationTests {
}
Run Code Online (Sandbox Code Playgroud)
... 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);
}
}
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以使用abstractaxtavt建议的基础测试类.
问候,
Sam(Spring TestContext Framework的作者)