2011-08-17 42 views
5

根據標題,我想知道在定義特定測試用例時是否可以爲Scalatest提供「假設」。在這種情況下的假設是測試的先決條件,如果假設評估爲假,測試將被跳過而不是執行(並由跑步者相應處理)。Scalatest對假設有任何支持嗎?

在這種特殊情況下,我在想依賴測試之間 - 所以有可能是一個基本的測試,驗證的方法是否返回所有什麼,其次是後來測試,鑽入響應的細節。如果前面的測試失敗了,我寧願讓後面的測試以某種方式標記爲「不可運行」,而不是讓它們失敗。

這就是說,我可以想象在將來使用它來定義一些不相關的前提條件(例如硬盤驅動器必須至少有20MB空間),所以如果有一種在運行時測試的通用方法(相對於使用ignorepending)我寧願聽到這一點。

專門的語法是受歡迎的,但如果我必須手動拋出某種異常也沒關係。

+0

你怎麼想測試是報道?被忽略,等待,成功,失敗? –

+0

我也想這樣。用例使用測試內容填充數據庫;如果失敗,則不應該運行從數據庫讀取的測試(不是全部)。我寧願將它們報告爲「忽略」。 – akauppi

回答

5

ScalaTest 2.0(我認爲)增加了對假設的支持:

特質斷言還提供了讓您取消測試方法。如果測試所需的資源不可用,您將取消測試。例如,如果測試需要外部數據庫在線,而測試不需要,則可以取消測試以指示由於缺少數據庫而無法運行該測試。這樣的測試假定一個數據庫是可用的,並且可以用假設法在測試開始時,表示這一點,就像這樣:

assume(database.isAvailable) 

http://www.scalatest.org/user_guide/using_assertions

+0

恕我直言,這應該是正確的答案 – akauppi

+0

@akauppi我同意。所以現在是。 :) –

1

Scalacheck,這往往是結合scalatest使用,可以做到這一點:

import org.scalacheck._ 

object XSpecifictaion extends Properties ("X") { 

    property ("sample (a - b)") = Prop.forAll { (a: Int, b: Int) => 
     (a < b || (a - b >= 0)) } 
} 

! (a < b)是你的假設,並且(a - b> = 0)是真正的測試;你只執行後者,如果假設是真實的,那麼你否定了你的假設,並將它與一個快捷方式結合起來。