2011-08-23 149 views
2

我在尋找谷歌的testing framework風格的斷言,其中類似ASSERT_LT(a,b)將檢查$ a是否小於$ b,如果不是,將打印$ a和$ b在錯誤信息中。到目前爲止我發現的斷言只是停止執行,而不打印默認情況下有用的任何東西。任何指針?獎金:我喜歡寫斷言重的代碼(不只是在測試中),所以如果斷言很快評估,那將會很不錯。更多信息隱藏在斯卡拉

上下文:我在使用this code作爲模板編寫unittests時遇到了這個問題。

+0

您鏈接到ScalaTest框架。你是說當ScalaTest斷言失敗時,它不打印有用的錯誤信息?或者你是否說你想要ScalaTest之類的東西而不實際使用ScalaTest?如果後者,你怎麼不想使用它? –

+0

我在說ScalaTest似乎沒有我想要的一切。這可能是我不瞭解ScalaTest中可用的內容,但我看到的唯一提供信息的操作符是「===」,它只能在聲明相等時使用。如果斷言失敗,我想斷言一個不等式並獲得一條信息錯誤消息。 – emchristiansen

回答

4

Specs2定義了一些匹配器,如must be_<=。起初我認爲這些都需要集成到一個規範中,但是在matchers page的底部,它表示它們是模塊化功能,「你應該能夠在你自己的測試 框架中重用」。作爲一個例子,「您可以重複【性狀如] org.specs2.matcher.MustMatchers寫這樣1 must be_==(1)和 什麼得到的結果回來」。

ScalaTest也有它自己的matchers。例如,one must be < (7)

0
def assert_<[A <% Ordered[A]](a: => A, b: => A) { 
    assert(a < b, "Assertion failed: expected %s < %s" format (a, b)) 
} 

scala> assert_<(2, 1) 
java.lang.AssertionError: assertion failed: Assertion failed: expected 2 < 1