1

toString明示的に使用しているため、このテストは問題ありません

"have one sentence by '...'" in {

  val text1 = Text("some text...")
  text1.sentences must have size(1)

  text1.sentences(0).toString must_== "some text"
}

toStingテストがない場合、次のようなメッセージで失敗します。

Expected :some text
Actual   :some text

java.lang.Exception: 'some text: dictionary.Sentence' is not equal to 'some text: java.lang.String'

私はそれの意味を(一般的に)理解していますが、toStringとにかく呼び出されるので、文字列から文字列をチェックするべきではありませんか?

このテストを簡潔に書くための最良の方法は何ですか? toString直接使用せず に。

4

1 に答える 1

1

私はあなたが混乱toStringしているかもしれないと思いますequals. 言いたいことを言うとき:

text1.sentences(0) must_== "some text"

あなたが本当に言っていることは次のとおりです。

text1.sentences(0).equals("some text") must beTrue

これを機能させたい場合は、センテンスの を使用して着信オブジェクト (この場合は a) と比較するequals関数がSentenceクラスに存在する必要があります。次のように見える簡単な仕様を示します。toStringString

class Sentence(text:String){
  override def equals(obj:Any) = {
    this.toString == obj.toString
  }
  override def toString = text
}

class EqualitySpec extends Specification{
  "A sentence" should{
    "be equal to plain text" in {
      val sentence = new Sentence("hello world")
      sentence must be_==("hello world")
    }
  } 
}

Sentenceそのクラスが独自のクラスである場合、これはうまく機能します。それがサードパーティのライブラリにあり、equals関数を制御できない場合は、そのままの状態で立ち往生している可能性があります。

于 2013-06-04T10:26:57.273 に答える