2014-01-15 26 views
0

我正在將新的scala代碼與現有系統集成。我們的數據庫測試目前是通過設置系統屬性「集成」來觸發的(通過Maven和現有的IDE配置)。這讓我們做到這一點,例如:在ScalaTest中,如何通過系統屬性指定測試標記

mvn test -Dintegration 

包括數據庫測試。如果我們離開財產,那麼測試會被跳過。基本上,我們現有的JUnit測試有(它是清潔了一下這個,但你會得到點):

assumeTrue(System.getProperty("integration") != null) 

正如我添加新的Scala代碼(注意:在使用JUnitRunner,再次使這一切只是工作),我需要能夠做相當的....我不想重建我的整個基礎設施(持續集成等)...我寧願做的是寫一個基本特徵或這樣我就可以將系統屬性轉換爲允許我跳過(或包含)測試的東西。

任何想法?

回答

1

我讀了源代碼,它看起來像JUnitRunner甚至不支持以當前形式提供標籤;但是,代碼很簡單,所以最好的方法是從現有的runner複製代碼,並修改它以滿足我的需求。

以下是由於包權限的要求等

  1. 你不能繼承JUnitRunner,因爲你需要的比特是私人
  2. 你必須把你的類在同一個包(ORG。 scalatest.junit)

除此之外,你可以簡單地複製現有JUnitRunner和修改的run()方法是:

def run(notifier: RunNotifier) { 
    val ignoreTags = Set("org.scalatest.Ignore") // the built in ignore support 
    val integrationTags = Set(DbTest.name) 
    val (tagsToRun, tagsToSkip) = 
     (if (System.getProperty("integration") == null) 
     (None, integrationTags ++ ignoreTags) 
     else 
     (Some(integrationTags), ignoreTags) 
     ) 
    try { 
     suiteToRun.run(None, Args(new RunNotifierReporter(notifier), 
     Stopper.default, Filter(tagsToRun, tagsToSkip), Map(), None, 
     new Tracker, Set.empty)) 
    } 
    catch { 
     case e: Exception => 
     notifier.fireTestFailure(new Failure(getDescription, e)) 
    } 
    } 
+0

+1用於閱讀信息來源,但是s/it's/its。 –

+0

thx爲sed修復 –

相關問題