Java自定义Annotation聚合多个注解
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
注释有什么特别之处吗?还是我错过了什么?
PS:我对 Spring config classes
使用相同的方法,它们工作得很好。
这种机制,你可以让 "meta-annotations" 本身用其他注释进行注释,然后应用于你放置元注释的 class,是特定于Spring 框架。它不是 Java 注释的标准功能。
它不起作用,因为 JUnit 不理解这种机制。 @RunWith
注释是 JUnit 注释。 JUnit 不明白它应该查看 @ControllerTest
元注释上的注释。
因此,此机制适用于 Spring 处理的注释,但不适用于 JUnit 等其他工具处理的注释。
从 spring 注释中创建 meta-annotations 是一个 spring 功能,@RunWith
是一个 JUnit 注释。
我正在为我的 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
使用相同的方法,它们工作得很好。
这种机制,你可以让 "meta-annotations" 本身用其他注释进行注释,然后应用于你放置元注释的 class,是特定于Spring 框架。它不是 Java 注释的标准功能。
它不起作用,因为 JUnit 不理解这种机制。 @RunWith
注释是 JUnit 注释。 JUnit 不明白它应该查看 @ControllerTest
元注释上的注释。
因此,此机制适用于 Spring 处理的注释,但不适用于 JUnit 等其他工具处理的注释。
从 spring 注释中创建 meta-annotations 是一个 spring 功能,@RunWith
是一个 JUnit 注释。