2014-10-29 44 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

相關問題