【问题标题】:Conditional execution of a method using annotation使用注解有条件地执行方法
【发布时间】:2012-12-12 08:45:31
【问题描述】:

在 java 中我可以使用注解有条件地执行方法吗?

我希望设置一些系统属性,并基于该系统属性,我希望在运行时执行或不执行方法(特别是基于 ant 脚本的 JUnit)。

如果可以使用注释,请告诉我。

【问题讨论】:

  • 我不确定是否收到您的问题:您是否正在寻找根据某些系统属性启用/禁用 JUnit 测试的方法?

标签: java annotations conditional-execution


【解决方案1】:

我认为你可以用 Java 实现它,但我建议你看看 Spring AOP - 我相信这就是你要找的。​​p>

【讨论】:

    【解决方案2】:

    您可以按@Category 对测试进行分组,并告诉运行包含此类别。

    来自http://alexruiz.developerblogs.com/?p=1711

    public interface FastTests { /* category marker */ }
    public interface SlowTests { /* category marker */ }
    
    public class A {
        @Category(SlowTests.class)
        @Test public void a() {}
    }
    
    @Category(FastTests.class})
    public class B {
        @Test public void b() {}
    }
    
    @RunWith(Categories.class)
    @IncludeCategory(SlowTests.class)
    @ExcludeCategory(FastTests.class)
    @SuiteClasses({ A.class, B.class })
    public class SlowTestSuite {}
    

    【讨论】:

      【解决方案3】:

      您可以为此实现自己的TestRunner 或用户AOP

      【讨论】:

        【解决方案4】:

        注解,在 Java 计算机编程语言中,是一种句法元数据,可以添加到 Java 源代码中。可以对类、方法、变量、参数和包进行注解。

        看看this

        【讨论】:

          【解决方案5】:

          我会通过扩展 BlockJUnit4ClassRunner 来编写一个简单的自定义测试运行器。该运行程序将从系统属性或配置文件中读取配置以仅运行定义的测试。最简单的解决方案是排除选定方法的黑名单,因为此(默认!)运行器的默认行为是运行每个测试。

          那就说吧

          @RunWith(MyTestRunner.class)
          public void TestClass {
          
          // ...
          
          }
          

          对于实现,只需覆盖getChildren() 方法就足够了:

          @Overwrite
          List<FrameworkMethod> getChildren() {
              List<FrameworkMethod> fromParent = super.getChildren();
              List<FrameworkMethod> filteredList = new ArrayList(filter(fromParent));
              return filteredList;
          }
          

          过滤器检查每个FrameworkMethod是否应该根据基于属性创建的“黑名单”执行。

          【讨论】:

            猜你喜欢
            • 2010-11-29
            • 2011-06-06
            • 2021-12-05
            • 2018-05-17
            • 1970-01-01
            • 2013-02-03
            • 1970-01-01
            • 1970-01-01
            • 2021-09-15
            相关资源
            最近更新 更多