我有许多通过相同 ScalaTest 单元测试运行的测试数据集。如果每个测试数据集都是它自己的一组命名测试,我会很高兴,所以如果一个数据集在其中一个测试中失败,我确切地知道它是哪一个,而不是去单个测试并查看它失败的文件。我似乎无法找到在运行时生成测试名称的方法。我看过基于属性和表的测试,目前正在使用should behave like共享装置,但这些似乎都没有做我想要的。
我是不是在 ScalaTest 中没有发现正确的测试方法,或者这是不可能的?
您可以使用 ScalaTest 编写动态测试用例,就像 Jonathan Chow 在他的博客中所写的那样:http : //blog.echo.sh/2013/05/12/dynamically-creating-tests-with-scalatest.html
但是,我总是更喜欢WordSpec测试定义,这也适用于 Jonathan 提到的动态测试用例。
class MyTest extends WordSpec with Matchers {
"My test" should {
Seq(1,2,3) foreach { count =>
s"run test $count" in {
count should be(count)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行此测试时,它运行 3 个测试用例
TestResults
MyTest
My test
run test 1
run test 2
run test 3
Run Code Online (Sandbox Code Playgroud)
附:您甚至可以foreach使用同一个count变量在同一个函数中执行多个测试用例。
您可以编写一个基本测试类,并为每个数据集扩展它。像这样的东西:
case class Person(name: String, age: Int)
abstract class MyTestBase extends WordSpec with Matchers {
def name: String
def dataSet: List[Person]
s"Data set $name" should {
"have no zero-length names" in {
dataSet.foreach { s => s.name should not be empty }
}
}
}
class TheTest extends MyTestBase {
override lazy val name = "Family" // note lazy, otherwise initialization fails
override val dataSet = List(Person("Mom", 53), Person("Dad", 50))
}
Run Code Online (Sandbox Code Playgroud)
产生如下输出:
TheTests:
Data set Family
- should have no zero-length names
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |