使用AspectJ,如何替换现有注释?
我有以下代码
declare @method : @Test * *(..) : @Test(timeout=10);
在每个测试方法上生成以下错误:
... already has an annotation of type org.junit.Test, cannot add a second
instance [Xlint:elementAlreadyAnnotated]
当然,错误是有道理的,但语法是什么,“从拥有它的所有方法中删除@Test
注释。然后将其替换为@Test(timeout=10)
”
答案 0 :(得分:4)
我是AspectJ项目负责人。在https://bugs.eclipse.org/bugs/show_bug.cgi?id=313026下,我们正在研究如何使用声明注释:
我们还在寻找一种删除注释的形式:
声明@remove_from_method:int mymethod():@ ToBeRemoved;
但你还不能做到......
答案 1 :(得分:1)
我怀疑你能用AspectJ做到这一点。至少我在AspectJ in Action的当前版本中找不到任何相关信息。
你可以做的是在测试注释旁边注入你自己的自定义注释,并编写一个自定义的JUnit Runner
类(绑定@RunWith
注释,你可以再次注入您的方面),使您的自定义注释优先于@Test
注释。