【发布时间】:2016-01-25 13:03:13
【问题描述】:
我正在为我的RestControllers写一个TestCases
对于每个ControllerTest calss,我使用以下注释
@WebAppConfiguration
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebConfig.class, TestAppConfig.class})
所以,我决定定义自己的注释,包含所有这样的注释
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@WebAppConfiguration
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebConfig.class, TestAppConfig.class})
public @interface ControllerTest {
}
然后,我只为我所有的ControllerTest classes 使用了一个注释
@ControllerTest
public class XXControllerTest {
}
修改后测试失败
java.lang.IllegalArgumentException: WebApplicationContext is required
at org.springframework.util.Assert.notNull(Assert.java:115)
为了让它再次工作,我需要将@RunWith(SpringJUnit4ClassRunner.class) 添加到Test class
@ControllerTest
@RunWith(SpringJUnit4ClassRunner.class)
public class XXControllerTest {
}
我的问题是为什么我的 @ControllerTest 注释在包含 @RunWith(SpringJUnit4ClassRunner.class) 注释时不起作用? @RunWith 注释有什么特别之处吗?还是我错过了什么?
PS:我对Spring config classes 使用相同的方法,它们工作得很好。
【问题讨论】:
标签: java spring unit-testing annotations