Scalatest或Specs2具有多个测试用例
题
在Testng和Java中,我们可以使用DataProvider运行多个测试用例,这是作为单独的测试运行的,这意味着执行测试并没有停止故障。 Scalatest或Specs/Specs2是否有类似物?
解决方案
在Scalatest和Specs2中,在运行时很容易创建测试用例,以便使用数据参数化。这是Specs2的示例:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, banana, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
然后输出为:
A basket must contain fruits
+ it contains: apple
+ it contains: banana
+ it contains: orange
而以下规范:
class BasketSpecification extends Specification {
"a basket must contain fruits" >> {
Seq(apple, cake, orange) foreach { fruit =>
("it contains: " + fruit) >> {
basket must contain(fruit)
}
}
}
}
将打印出类似的内容:
A basket must contain fruits
+ it contains: apple
x it contains: cake
'basket' does not contain 'cake'
+ it contains: orange
其他提示
该概念在Scalatest中称为“共享测试”,因为多个固定装置正在“共享”相同的测试代码,其中“固定装置”是Testng的DataProvider方法中的“数据”。对于Scalatest中的每个样式特征,有一种方法可以用作函数表达测试。这是WordsPec的示例:
http://www.scalatest.org/scaladoc-1.6.1/#org.scalatest.wordspec@sharedtests
或者,您可以仅使用for loop来为不同的数据点注册相同的测试代码。这是在这里的电子邮件讨论中提出的:
http://groups.google.com/group/scalatest-users/browse_thread/thread/7337628407b48064#
在这种情况下,For循环代码看起来像:
for (browser <- List("IE", "Chrome", "Firefox")) {
test(browser + ": test one") { driver =>
info("Testing using " + driver)
}
test(browser + ": test two") { driver =>
info("Testing using " + driver)
}
test(browser + ": test three") { driver =>
info("Testing using " + driver)
}
test(browser + ": test four") { driver =>
info("Testing using " + driver)
}
test(browser + ": test five") { driver =>
info("Testing using " + driver)
}
}
}
这实际上注册了15次测试,每个浏览器驱动程序进行了5项测试。我相信这就是您所追求的。
不隶属于 StackOverflow