Try*_*lks 8 unit-testing scala hierarchy specs2
我已经习惯了JUnit,在JUnit中,只需在单个文件(类)中定义这些测试并使用它们进行注释,就可以将多个测试(通常与类相关)组合在一起@Test.然后,要运行其中几个测试,TestSuite使用@Suite.SuiteClasses依此类推创建a .
在specs2中,可以将两个不同级别的测试分组,扩展一些Specification.例如:
"Whatever" should {
"do its job when possible" in {
whatever(new Thing).work must beSome
}
"return none when not possible" in {
whatever(null).work must beNone
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以Specification将这种类型中的几个组合在一个文件中,并且每个都可以打包几个检查,每个检查就像一个@Test,每个组像JUnit中的文件一样,然后每个都Specification作为SuiteJUnit中的一个,除了a Suite被分成几个类和a Specification在单个类(即文件)中,这往往会产生巨大的文件.
所以问题有两个:
Specification和每个班级应该做的事情,即它应该通过的检查.Suite如果可能的话以分层方式对它们进行分组,例如Suites对于ScalaTest.BTW:我使用Specs2因为我觉得这是标准的(默认情况下是与原型,一个(非常小)小(传闻)样本证实了这一[ 1,2 ]),但我正在考虑使用ScalaTest.根据数字(specs2,scalatest)判断,这可能是遵循Scala社区标准和习俗的最佳选择.我之所以提到这一点是因为出于这些原因,"不可能使用ScalaTest"这样的答案是可以接受的.
Eri*_*ric 10
在specs2中,没有分层套件的概念.规范只是一个示例列表.即使您将它们分组xxx should yyy,这只会影响控件中显示示例的方式,或多或少的缩进.
另一方面,有一些方法可以使用specs2组织规范:
您可以通过创建引用其他规范的顶级规范来创建规范层次结构:
// code for specs2 3.x
class ParentSpec extends Specification { def is = s2"""
These are all the important specifications about our domain
${"child1" ~ ChildSpec1}
${"child2" ~ ChildSpec2}
"""
}
Run Code Online (Sandbox Code Playgroud)
子规格可以参考其他规格等.与JUnit(可能还有ScalaTest)的不同之处在于您的参考图不需要是树.使用all参数执行规范时
sbt> test-only ParentSpec -- all
Run Code Online (Sandbox Code Playgroud)
然后从依赖关系开始,ParentSpec以便在高级别之前执行低级别依赖关系.任何周期都会被打破,这样你就不会无限地执行任务(或得到一个StackOverflowError).
标签是一种非常方便的分类方法,因为给定的"东西"不需要只属于一个类别.当时,这是TestNG带来的重大改进之一.在specs2中,您可以标记单个示例或整个规范,然后根据包含/排除某些标记声明要运行的示例.例如
class Spec1 extends mutable.Specification { section("functional")
"simple test" >> ok
tag("io")
"a bit of IO" >> ok
}
class Spec2 extends mutable.Specification { section("functional")
"another simple test" >> ok
tag("io")
"another bit of IO" >> ok
}
Run Code Online (Sandbox Code Playgroud)
然后,您只能使用functional标记执行规范,而不能使用包含io标记的示例执行规范
sbt> test-only -- include functional exclude io
Run Code Online (Sandbox Code Playgroud)
使用引用和标记,您可以想象几种切片和切块测试源的方法:
io,slow,database,scalacheck...请注意,您还可以混合使用上述所有内容并在引用上添加标记,包含示例和引用的规范,等等.
选择给定结构的标准是:
| 归档时间: |
|
| 查看次数: |
1330 次 |
| 最近记录: |