2012-12-12 188 views
1

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

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

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

+1

我不确定是否有问题:您是否在寻找启用/禁用JUnit测试的方法,具体取决于某些系统属性? – Puce

回答

0

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

看看this

1

我认为你可以在Java中实现,但我建议你看一看上Spring AOP - 我认为这是你在找什么。

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 {} 
0

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

然后只是说

@RunWith(MyTestRunner.class) 
public void TestClass { 

// ... 

} 

对于实现,它可以sufficiant只覆盖getChildren()方法:根据

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

其中过滤器检查每一个FrameworkMethod是否应被执行或不到基于财产创建的“黑名单”。