2013-06-04 63 views
0

這個測試是OK,因爲我用toString明確scala specs2。等於支票依託的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

回答

1

我想你可能會混淆toStringequals。當你說你想說的話:

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

你真正想說的是:

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

如果你想要這個工作,那麼你就需要有要上Sentenceequals功能類使用句子的toString與傳入對象進行比較(在這種情況下爲String)。一個簡單的規格表現可能看起來像這樣的:

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函數,那麼您可能會陷入困境。