是否可以将两个注释标记为互相排斥?
我有一个自定义的JUnit运行器,我想确保如果测试标有我的注释@Custom
,则用@Test
标记它将抛出(最好)编译错误或(更少)优选地)运行时错误。
我想要的原因是@Custom
基本上是@Test
,但在运行测试之前需要一些额外的预处理。而且,我编写它的方式,对于每个自定义标签(是的,不止一个),测试将每次运行多次并进行相应的预处理。因此,让它运行@Test
也没有意义,因为该测试意味着要进行一些预处理。
而且,是的,我想在我的框架中同时支持@Custom
和@Test
(尽管不是针对相同的测试方法)。
答案 0 :(得分:1)
没有任何方法可以限制您可以在Java元素上添加注释。因此,举例来说,您可以将字段标记为@Required
和@Optional
,即使这完全是荒谬的。
您必须在运行时通过查看注释内容或通过查找您感兴趣的特定注释,然后抛出异常(将通过单元测试捕获)来进行检查。
您的具体问题可能有更好的解决方案。如果您想特别处理某些测试用例,您可能希望实现自己的测试运行器并使用@RunWith
注释来调用它。然后,您可以确保@Custom
方法获得必备操作。
答案 1 :(得分:1)
您可以利用Java Annotation Processing为您执行此操作(通过调用后编译操作,而后编译任务也会失败),但它不必要地复杂化。 (如果你真的想,请告诉我,我为你挖掘出代码)。更容易的是,你可以手动调用一个收集信息的小班。
更精确:你是否需要它(你自己和你自己)作为方便,还是你需要将它作为一个自动化解决方案(并且愿意付出一些努力?)
答案 2 :(得分:0)
由于代码在您的框架中运行,您可以添加AOP代码来检查互斥关系,方法是将pointCut添加到使用@Custom注释的所有类中,如果还有@Test注释,则抛出RuntimeException。