我进行了org.scalatest.FunSpec with org.scalatest.Matchers
测试,例如:
val tol = 1e-10
val res = 1.000000000000001
val ref = 1.000000000000000
res should be (ref +- tol)
但它是在一个循环中为名称键入的多个案例进行的,当然我无法更改测试代码的粒度,因此我得到了一组与这些名称相关联的值。因此,对于上面的测试,我需要添加额外的上下文或额外描述name
以反映它适用的名称。我需要这样的东西:
val name : String = ...
res should be (ref +- tol) for name
此时我无法使用it
和describe
,因为他们已经在外面。
答案 0 :(得分:4)
这实际上取决于您尝试做的事情,您应该添加一个更完整的示例来说明您尝试实现的目标,但您可以在循环中使用describe
。例如:
class TempTest extends FunSpec with Matchers {
describe("Some example test") {
(1 to 10).foreach { i => // your loop here
describe(s"Scenario $i") {
it("should be equal to itself") {
i shouldBe i
}
}
}
}
}
更新:您可以使用withClue
向匹配器添加更多上下文,例如:
withClue("Some clarifying message") {
i shouldBe 5
}
如果条件失败,这会将错误字符串添加到错误中。
答案 1 :(得分:1)
可能在给定时可以使用以便为测试报告添加上下文。我不确定你是如何将多个测试包装在循环中的,但是这里有一个想法:
import org.scalatest.{GivenWhenThen, WordSpec}
/**
* Created by alex on 10/3/16.
*/
class Temp extends WordSpec with GivenWhenThen{
val names = List("Alex", "Dana")
for(name <- names)yield{
"Reversing a name " + name + " two times" should {
"result in the same name" in{
Given("name " + name)
When("reversed two times")
val reversed = name.reverse.reverse
Then("it should be the same")
assert(name === reversed)
}
}
}
}