【问题标题】:Can Java annotations be unit tested?Java注解可以进行单元测试吗?
【发布时间】:2009-03-24 09:12:33
【问题描述】:

我最近开始创建自己的注解,并且为了运动 TDD/BDD,我想对我的注解进行单元测试,以便为它们创建一个清晰的规范。然而,由于注解基本上只是花哨的接口,据我所知不能真正直接实例化,有没有什么办法可以通过反射来对注解进行单元测试?

【问题讨论】:

标签: java tdd annotations bdd


【解决方案1】:

我通常不会为此编写测试,但您可以简单地创建一组使用和滥用注释的测试类,以测试它是否存储其成员值、它是否具有正确的默认值等。

这当然只适用于在正确目标上指定的运行时注释。

根据我的经验,注释本身很少有趣到足以保证单元测试 - 通常是使用它们的代码需要测试。但是我不是来自 100% 代码覆盖率的思想流派:-)

【讨论】:

  • 对编译时注释进行单元测试会很棒——例如:code.google.com/p/javadude/wiki/Annotations。这些是测试的主要痛苦! (我有一个项目的“测试”和“预期”副本,我在编译后比较......)
  • 如果您正在开发注释,请测试您正在编写的代码。由于注释的行为是由 Java 类引起的,因此请像测试任何其他 Java 类一样测试它们。在某些时候,您可能想要测试它们是否“作为注释工作”,就像安东尼在上面的答案中提到的那样。
【解决方案2】:

注解有一些影响(否则,使用它们将毫无意义)。所以不要测试注解的存在而是它应该有的效果。

【讨论】:

    【解决方案3】:

    您可以对您的注释定义是否正常进行单元测试:它是否可以应用于有效的元素集,如果需要,它是否在运行时可用,默认值是否正确初始化? 然后,稍后,对将处理您的注释的类进行单元测试。

    【讨论】:

      【解决方案4】:

      您不能直接测试它们,因为正如您所指出的,没有什么可以测试的。不过,你可以证明一些事情:

      • 代码中带有注释的对象在运行时具有任何预期的注释
      • 默认值已初始化
      • 注释绑定到您期望的内容

      当你进行单元测试时,你可以证明的一件事是你的实现符合接口。所以如果一个注解暗示了某些行为或属性(例如Serializable,事情真的应该是可序列化的),您也希望在测试中表示这一点。

      【讨论】:

        猜你喜欢
        • 2010-09-22
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 2019-09-06
        • 1970-01-01
        相关资源
        最近更新 更多