5

タイトルのとおり、特定のテスト ケースを定義する際に、Scalatest に「仮定」を提供できないかと考えています。このコンテキストでの仮定は、テストの前提条件であり、仮定が false と評価された場合、テストは実行されるのではなくスキップされます (それに応じてランナーによって処理されます)。

この特定のケースでは、テスト間の依存関係について考えています。したがって、メソッドが何かを返すかどうかを検証する基本的なテストがあり、その後に応答の詳細を掘り下げる後のテストが続く場合があります。前者のテストが失敗した場合、後者のテストも失敗するのではなく、何らかの方法で「実行不可」としてマークした方がよいでしょう。

つまり、将来これを使用して、接続されていない前提条件 (ハード ドライブに少なくとも 20MB の空き容量が必要など) を定義することを想像できるので、実行時にテストをスキップする一般的な方法がある場合 ( ignoreorを使用するのではなくpending) 私はそれを聞きたいです。

特殊な構文は大歓迎ですが、特定の種類の例外を手動でスローする必要がある場合でも問題ありません。

4

2 に答える 2

5

ScalaTest 2.0 (私が思うに) は仮定のサポートを追加しました:

特性アサーションには、テストをキャンセルできるメソッドも用意されています。テストに必要なリソースが利用できない場合は、テストをキャンセルします。たとえば、テストで外部データベースをオンラインにする必要があり、そうでない場合、データベースがないために実行できなかったことを示すために、テストをキャンセルできます。このようなテストでは、データベースが利用可能であると仮定します。次のように、assume メソッドを使用して、テストの開始時にこれを示すことができます。

assume(database.isAvailable)

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

于 2014-01-27T11:10:57.833 に答える
1

多くの場合、scalatest と組み合わせて使用​​される Scalacheck を使用すると、次のことができます。

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) は実際のテストです。仮定が真の場合にのみ後者を実行するため、仮定を否定し、ショートカット OR と組み合わせます。

于 2011-08-17T17:50:50.033 に答える