我正在将新的scala代码与现有系统集成。我们的数据库测试目前是通过设置系统属性“集成”来触发的(通过Maven和现有的IDE配置)。这让我们可以这样做,例如:
mvn test -Dintegration
包含数据库测试。如果我们离开房产,则跳过测试。基本上,我们现有的JUnit测试都有(它有点干净,但你会明白这一点):
assumeTrue(System.getProperty("integration") != null)
因为我正在添加新的scala代码(注意:使用JUnitRunner,所以这一切都正常工作),我需要能够做同等的....我不想重建我的整个基础设施(持续集成等)...我宁愿做的是写一个基本特征或其他东西,以便我可以将系统属性转换为允许我跳过(或包含)测试的东西。
有什么想法吗?
答案 0 :(得分:1)
我阅读了源代码,看起来JUnitRunner甚至不支持以当前形式提供标签;但是,代码很简单,因此最好的方法是从现有的运行器中复制代码,并对其进行修改以满足我的需求。
以下是由于包权限等原因而产生的要求
除此之外,您只需复制现有的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))
}
}