1

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

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

请让我知道是否可以使用注释。

4

5 回答 5

1

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

于 2012-12-12T08:51:39.493 回答
1

您可以按@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 {}
于 2012-12-12T08:52:45.523 回答
0

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

于 2012-12-12T08:51:30.500 回答
0

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

看看这个

于 2012-12-12T08:51:35.190 回答
0

我会通过扩展来编写一个简单的自定义测试运行器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是否应该执行。

于 2012-12-12T09:07:38.973 回答