[英]Java custom Annotation aggregate multiple annotations
我正在為我的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(SpringJUnit4ClassRunner.class)
? @RunWith
注釋有什么特別之處嗎? 還是我錯過了什么?
PS:我對Spring config classes
使用相同的方法,它們工作得很好。
這種機制,你可以在其中使用其他注釋注釋的“元注釋”,然后將其應用於放置元注釋的類,這是Spring Framework特有的。 它不是Java注釋的標准功能。
它不起作用,因為JUnit不理解這種機制。 @RunWith
注釋是一個JUnit注釋。 JUnit不明白它應該查看@ControllerTest
元注釋上的注釋。
因此,此機制適用於由Spring處理的注釋,但不適用於由其他工具(如JUnit)處理的注釋。
從spring注釋創建元注釋是一個彈簧特征,而@RunWith
是一個JUnit注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.