此测试没问题,因为我明确使用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
。
答案 0 :(得分:1)
我认为您可能会混淆toString
和equals
。当你说出你想说的话时:
text1.sentences(0) must_== "some text"
你真正说的是:
text1.sentences(0).equals("some text") must beTrue
如果你希望这个工作,那么你需要在equals
类上有一个Sentence
函数,它使用句子的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
函数,那么您可能会遇到它们的问题。