2014-10-29 43 views
1

用SBT构建一个Scala程序,我想在构建的JAR文件中禁用断言,但是我想在测试期间启用断言。这包括主要类中陈述的主张。 明显SBT键是:在用SBT构建的jar中禁用断言,但在测试中启用?

scalacOptions in Compile ++= Seq(
    "-optimise", 
    "-Xelide-below", "3000", 
    "-Xdisable-assertions") 
scalacOptions in Test ++= Seq("-optimise") 

不幸的是,这并不工作:JAR文件确实已禁用断言,但这样做的测试。例如,ScalaTests

it("should have assertions enabled in test classes") { 
    intercept[AssertionError] { 
    Predef.assert(false, "Assertions are enabled in test classes") 
    } 
} 

it("should have assertions enabled in main classes") { 
    intercept[AssertionError] { 
    MainClass.assertFalse 
    } 
} 

都失败,错误:Expected exception java.lang.AssertionError to be thrown, but no exception was thrown.

+0

我很惊讶的是,2年后,这个问题仍然没有得到解决。人们在代码中如何使用断言? – guyvdb 2016-11-14 06:07:38

回答

0

在测试选项被附加到在编译选项。要看到它的价值,运行sbt "show test:scalac-options"

要更正,只需您的构建改成这样:

scalacOptions in Test := Seq("-optimise") 
+1

谢谢,但这只能解决问题的一半。事实上,现在断言在测试类本身中启用(第一个测试成功)。 主类中的断言仍然被禁用,因为它们是在编译阶段用不同的标志编译的。所以第二个测试失败(ScalaTest应该在主类中启用断言)。 – guyvdb 2014-11-03 13:48:55

相关问题