Scala Specs2匹配器看起来像这样(例如):
def haveSizeOf(size: Int): Matcher[ProductElement] = {
productElement: ProductElement =>
val sizeOfproductElement = productElement.size
sizeOfproductElement aka "size of product element"
} ^^ beEqualTo(size)
它在代码中执行:
updatedProductElement must haveSizeOf(1)
引发错误:
java.lang.Exception的: 'org.specs2.matcher.ThrownExpectations$$anon$1@6a3b7968'
不等于
'1'
我应该采取哪些不同的方式?
修改
如果aka
已删除,则测试成功通过:
def haveSizeOf(size: Int): Matcher[ProductElement] = {
productElement: ProductElement =>
productElement.size
} ^^ beEqualTo(size)
答案 0 :(得分:1)
beEqualTo()
将值(例如size
)与Any
值进行比较,包括org.specs2.matcher.ThrownExpectation
,这是您使用aka
构建的值。构建haveSizeOf
匹配器的正确方法是
def haveSizeOf(size: Int): Matcher[ProductElement] = {
productElement: ProductElement =>
val sizeOfproductElement = productElement.size
beEqualTo(size).apply(sizeOfproductElement aka "size of product element")
}
每个Matcher[T]
都有一个apply
方法,它接受Expectation[T]
类型的值(基本上期望值是T
类型的值加上您构建的可选描述与aka
)。
构建相同匹配器而不重用beEqualTo
的另一种方法是
def haveSizeOf(size: Int): Matcher[ProductElement] = {
productElement: ProductElement =>
(productElement.size == size,
s"the size of product element ${productElement.size} is not $size")
}