当前位置: 首页 > 知识库问答 >
问题:

Junit5-Jupiter:composit(=“meta”)注释不能解析为注释定义

连正信
2023-03-14

我定义了自己的JUnit注释:

@ParameterizedTest
@MethodSource("myorg.qa.ccrtesting.DataProviders#standardDataProvider")
@Tags({@Tag("ccr"), @Tag("standard")})
public @interface CcrStandardTest {
}

然后,我能够在测试中使用该注释:

@CcrStandardTest
public void E0010_contact_standard (String testData) {
...
    null

当我在原型测试方法上方添加@test时,它将执行,但是:

  1. 似乎没有应用我在@ccrstandardtest下定义的注释
  2. IDE建议可疑的组合@test和parameterized source
    (我已经知道@parameterizedtest意味着@test,只是不知道为什么IDE能够找到自定义注释,而JUnit不能?)

共有1个答案

黄扬
2023-03-14

正如您所发现的,您需要将@retention(RUNTIME)添加到您的组合注释中,以便JUnit能够看到它。Java中的注释有三种不同的保留策略:

>

  • retentionpolicy.source

    注释将被编译器丢弃。

    正如我在上面强调的,如果您没有显式地添加@retention(...),那么将使用策略。这不适用于JUnit,因为JUnit不扫描*.class文件(即字节码)来查找注释,而是反射性地扫描加载的类来查找测试方法。如果没有runtime保留策略,您的注释就不能反射性地访问,因此JUnit永远不会看到它,因此不会执行测试。

    @target注释:

    指示批注类型适用的上下文。JLS 9.6.4.1中指定了可能适用注释类型的声明上下文和类型上下文,并在源代码中由java.lang.annotation.ElementType的枚举常量表示。

    如果存在@target元注释,编译器将强制执行ElementType枚举常数指示的使用限制,这与JLS 9.7.4一致。

    在回答你的另一个问题时,我用了:

    @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
    

    因为这与@parameterizedtest使用的目标相同。我认为将其限制为method是一个好主意,因为@parameterizedtest的设计者显然认为只有方法应该由parameterized-tests扩展直接扩展(参见§5扩展模型)。包括annotation_type允许您将组合注释放置在另一个注释上,从而创建另一个组合注释。

    注意,这些注释--@retention@target@documented-并不特定于JUnit。这些注释对于Java中的注释如何工作至关重要,每个注释都位于Java.lang.annotation包中。

  •  类似资料:
    • 问题内容: 我想要一个带pdf并返回文档中注释注释文本列表的python函数。我看过python- poppler(https://code.launchpad.net/~poppler-python/poppler- python/trunk ),但我不知道如何获取它来给我有用的东西。 我找到了该方法,并修改了通过调用它的演示程序,但是我不知道该如何处理AnnotMapping对象。它似乎没有完

    • 我将selenium与java和以下pom包一起使用, 我可以使用WebDriver和其他对象,但当我试图使用注释@findby时,我的项目似乎找不到满足它的包“不能解析为类型”,也不建议使用selenium包。 selenium的注释系统位于哪个maven存储库中?还是我错过了什么? 谢谢。

    • 问题内容: 我想使用Django建立一个简单的热门问题列表。我有一个函数,可以根据一些参数评估每个问题的“ 热度 ”。 功能看起来与此类似(此处为完整功能) 我的问题和投票模型(相关部分) 现在,它是正数或负数。热功能会收到正面投票数和负面投票数以及问题的创建日期。 我已经尝试过类似的方法,但是它不起作用。 我得到的错误是: 我理解该错误,但是我没有正确的方法。 问题答案: 您不能将python函

    • 本文向大家介绍全面解析Java中的注解与注释,包括了全面解析Java中的注解与注释的使用技巧和注意事项,需要的朋友参考一下 注解 一、什么是 Annotation? (注解 or 注释) Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。 Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次,可以成为java 的一个类型。 语

    • 问题内容: 我为我写了一个 对于每个我使用以下注释 因此,我决定定义自己的注释女巫,其中包含所有这样的注释 然后,我只用了一个注释 修改后,测试失败 为了使其再次工作,需要我将其添加到 我的问题是为什么我的注释包含注释时不起作用?注释有什么特别之处吗?还是我错过了什么? PS:我使用相同的方法,它们也很好用。 问题答案: 这种机制是Spring框架特有的,在这种机制中,您可以使用本身带有其他注释的

    • 使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。 连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 ":起始行,终止行 s/^/#/g",例如: :1,10s/^/#/g 表示在第 1~10 行行首加"#"注释。"^"意为行首;"g"表示执行替换时不询问确认。如果希望