【发布时间】:2014-12-15 20:01:54
【问题描述】:
我正在使用 Scala 和 Akka 开始一个新项目,但在编写测试时遇到了麻烦。在我的测试中,我正在使用 should equal 检查两个 List 对象的相等性:
actualBook should equal (expectedBook)
我的测试套件中的所有内容都编译并运行,但测试失败并显示以下消息:
org.scalatest.exceptions.TestFailedException: List(BookRow(A,100.0,10.6)) did not equal List(BookRow(A,100.0,10.6))
显然测试通过了(即,两个List 对象包含相同的内容)。不确定这是否相关,但actualBook 和expectedBook 具有相同的哈希码(并且actualBook(0) 和expectedBook(0) 也具有相同的哈希码)。
我想知道问题是否是由于......
- 我使用了不正确的比较运算符
- 事实上我没有明确定义比较
BookRow对象的方法。
这里是我的测试代码供参考:
包 lob
import cucumber.api.DataTable
import org.scalatest.Matchers._
import scala.collection.JavaConversions._
import cucumber.api.java.en.{When, Then}
class OrderBookSteps {
val orderTypes = OrderType.all()
val buyBook: OrderBook = new OrderBook(Bid, orderTypes)
val sellBook: OrderBook = new OrderBook(Ask, orderTypes)
@When("""^the following orders are added to the "(.*?)" book:$""")
def ordersAddedToBook(sideString: String, orderTable: DataTable) {
val (side, book) = getBook(sideString)
val orders = orderTable.asList[OrderRow](classOf[OrderRow]).toList.map(
r => LimitOrder(r.broker, side, r.volume, r.price.toDouble))
orders.foreach(book.add)
}
@Then("""^the "(.*?)" order book looks like:$""")
def orderBookLooksLike(sideString: String, bookTable: DataTable) {
val (_, book) = getBook(sideString)
val expectedBook = bookTable.asList[BookRow](classOf[BookRow]).toList
val actualBook = book.orders().map(o => BookRow(o.broker, o.volume, orderTypes(o).bookDisplay))
actualBook should equal (expectedBook)
}
def getBook(side: String) = side match {
case "Bid" => (Bid, buyBook)
case "Ask" => (Ask, sellBook)
}
case class OrderRow(broker: String, volume: Double, price: String)
case class BookRow(broker: String, volume: Double, price: String)
}
【问题讨论】: