JUnit上的注释数测试不正确

时间:2015-09-01 07:55:35

标签: java unit-testing annotations junit4

我已经创建了一些自定义注释,用于通过JUnit运行的系统测试。

例如测试看起来像这样:

@TestCaseName("Change History")
public class ChangeHistory extends SystemTestBase
{    
    @Test
    @Risk(1)
    public void test()
    {
...

我现在正在实施一个测试运行器,它将报告测试名称,风险以及出于文档目的的某处。

public class MyRunner extends BlockJUnit4ClassRunner
{
    ...
    @Override
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) 
    {
        ...
        System.out.println("Class annotations:");
        Annotation[] classanno = klass.getAnnotations();
        for (Annotation annotation : classanno) {
            System.out.println(annotation.annotationType());
        }

        System.out.println("Method annotations:");
        Annotation[] methanno = method.getAnnotations();
        for (Annotation annotation : methanno) {
            System.out.println(annotation.annotationType());
        }

输出

Class annotations:
Method annotations:
interface org.junit.Test

所以getAnnotations()似乎只返回JUnit的注释而不是所有注释。这没有提及in the documentation of JUnit

  

返回此方法的注释

返回类型为java.lang.Annotation,这让我相信我可以使用任何注释。我定义了如下注释 - 我刚刚使用它,当出现错误时我让Eclipse生成注释:

public @interface Risk {
    int value();
}

如何获取测试类和测试方法的所有注释?

1 个答案:

答案 0 :(得分:1)

您需要将Risk注释的保留政策设置为RUNTIME。否则,注释将在编译后被丢弃,并且在执行代码期间将不可用。

这应该有效:

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Risk {
  int value();
}