2012-12-12 227 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是否應被執行或不到基於財產創建的「黑名單」。