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

如果你想让它工作,那么你需要equals在类上有一个函数,Sentence它使用toString句子的 来与传入的对象(String在本例中为 a)进行比较。一个简单的规范显示可能如下所示:

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 回答