在java中,我可以使用註釋條件執行方法嗎?使用註釋條件執行方法
我希望有一些系統屬性集,並基於該系統屬性我希望在運行時執行或不執行方法(特別是基於Ant腳本的JUnits)。
請讓我知道是否有可能使用註釋。
在java中,我可以使用註釋條件執行方法嗎?使用註釋條件執行方法
我希望有一些系統屬性集,並基於該系統屬性我希望在運行時執行或不執行方法(特別是基於Ant腳本的JUnits)。
請讓我知道是否有可能使用註釋。
爲此,您可以實現您自己的TestRunner或用戶AOP。
Java計算機編程語言中的註釋是一種可以添加到Java源代碼中的語法元數據形式。類,方法,變量,參數和包可能被註釋。
看看this
我認爲你可以在Java中實現,但我建議你看一看上Spring AOP - 我認爲這是你在找什麼。
您可以按@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 {}
我會寫通過擴展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
是否應被執行或不到基於財產創建的「黑名單」。
我不確定是否有問題:您是否在尋找啓用/禁用JUnit測試的方法,具體取決於某些系統屬性? – Puce