互斥注释

时间:2012-02-20 17:46:56

标签: java junit

是否可以将两个注释标记为互相排斥?

我有一个自定义的JUnit运行器,我想确保如果测试标有我的注释@Custom,则用@Test标记它将抛出(最好)编译错误或(更少)优选地)运行时错误。

我想要的原因是@Custom基本上是@Test,但在运行测试之前需要一些额外的预处理。而且,我编写它的方式,对于每个自定义标签(是的,不止一个),测试将每次运行多次并进行相应的预处理。因此,让它运行@Test也没有意义,因为该测试意味着要进行一些预处理。

而且,是的,我想在我的框架中同时支持@Custom@Test(尽管不是针对相同的测试方法)。

3 个答案:

答案 0 :(得分:1)

没有任何方法可以限制您可以在Java元素上添加注释。因此,举例来说,您可以将字段标记为@Required@Optional,即使这完全是荒谬的。

您必须在运行时通过查看注释内容或通过查找您感兴趣的特定注释,然后抛出异常(将通过单元测试捕获)来进行检查。

您的具体问题可能有更好的解决方案。如果您想特别处理某些测试用例,您可能希望实现自己的测试运行器并使用@RunWith注释来调用它。然后,您可以确保@Custom方法获得必备操作。

答案 1 :(得分:1)

您可以利用Java Annotation Processing为您执行此操作(通过调用后编译操作,而后编译任务也会失败),但它不必要地复杂化。 (如果你真的想,请告诉我,我为你挖掘出代码)。更容易的是,你可以手动调用一个收集信息的小班。

更精确:你是否需要它(你自己和你自己)作为方便,还是你需要将它作为一个自动化解决方案(并且愿意付出一些努力?)

答案 2 :(得分:0)

由于代码在您的框架中运行,您可以添加AOP代码来检查互斥关系,方法是将pointCut添加到使用@Custom注释的所有类中,如果还有@Test注释,则抛出RuntimeException。