Scalatest:应该是Matchers有额外描述吗?

时间:2016-10-03 10:08:58

标签: scala scalatest

我进行了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

此时我无法使用itdescribe,因为他们已经在外面。

2 个答案:

答案 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)
      }
    }
  }
}