3

Scala (v2.9.1) で specs2 (v1.8.2) を使用して受け入れテストを作成しています。http://etorreborre.github.com/specs2/guide/org.specs2.guide.SpecStructure.html#Contextsの例に従って、次の仕様とコンテキスト ケース クラスがあります。

import org.specs2._


class testspec extends SpecificationWithJUnit { def is =

    "test should" ^
        "run a test in a context" ! context().e1

}

case class context() {

    def e1 = 1 must beEqualTo(1)
}

コンパイラ エラーが発生します。

エラー: 値は Int def e1 = 1 のメンバーではない必要があります beEqualTo(1)

コンテキストケースクラスをコンパイルするとき。

明らかに、私は specs2 (および Scala) が初めてです。適切なドキュメントへの参照は大歓迎です。

4

2 に答える 2

3

明らかにドキュメントが間違っています(間違っていました。今修正しました)。

Specificationコンテキストのケース クラスを宣言する正しい方法は、通常、それをスコープに含めることです。

import org.specs2._

class ContextSpec extends Specification { def is =
  "this is the first example" ! context().e1

  case class context() {
    def e1 = List(1,2,3) must have size(3)
  }
}

それ以外の場合、別の仕様でコンテキストを再利用したい場合は、Dario が書いたように、オブジェクト メソッドMustMatchersをインポートするか、トレイトを継承することで機能にアクセスできます。MustMatchersMustMatchers

于 2012-03-12T03:50:04.027 に答える
2

「must」は「context」クラスのコンテキストでは不明であるため、must は Int のメンバーではありません。メソッド「e1」を仕様クラス内に配置すると、機能するはずです。例えば

import org.specs2._

class TestSpec extends Specification { def is =
  "test should" ^
    "run a test in a context" ! e1 ^
    end

  def e1 = 1 must beEqualTo(1)

}

編集

ああ、私はあなたが望むものを見ます;-)。これは次のように機能するはずです。

コンテキスト クラスのスコープにマッチャーを含めるには、MustMatchers をインポートする必要があります。

import org.specs2._
import matcher.MustMatchers._

class ContextSpec extends Specification { def is =
  "this is the first example" ! context().e1
}

case class context() {
  def e1 = List(1,2,3) must have size(3)
}
于 2012-03-09T17:52:20.810 に答える