Specs2 单位规格参考
Specs2 unit specification referencing
我有以下规格:
import org.specs2.mutable.{After, Specification}
import org.specs2.specification.Scope
import org.specs2.specification.core.{Fragment, Fragments}
class TestRefSpec extends Specification {
"My Spec" >> new iii {
xxx(i)
}
def xxx(i: Int) = {
def e1 = {
println(s"** $i > 0")
i must be_>(0)
}
def e2 = {
println(s"** $i < 100")
i must be_<(100)
}
"i should be > 0" >> { e1 }
"and < 100" >> { e2 }
}
}
trait iii extends Scope with After {
val i = 142
def after = println("finalising")
}
这个想法是,有一个测试某些行为的规范,然后有由测试行为的范围表示的目标。
理想情况下,这些行为将位于一个单独的特征中。
唉,当我 运行 虽然我得到的输出如下:
[info] TestRefSpec
[info] + My Spec
[info] Total for specification TestRefSpec
[info] Finished in 560 ms
[info] 1 example, 0 failure, 0 error
这意味着测试并不真正 运行。
有谁知道我如何真正实现我的目标?
提前致谢!
我认为问题在于您将 xxx(i)
方法调用包装在 new iii {}
.
中
这行不通,因为 curlies 中的代码是在扩展 iii
的新匿名 class 的构造函数中执行的,并且整个表达式的结果是 iii
,而不是 Fragments
,所以你从 xxx()
方法内部构造和 return 的例子的内部结构,不能符合 specs2 >>
操作员。
通常只有个别示例 - 前面有 specs2 in
运算符被包裹在一个范围内。
这会起作用:
class TestRefSpec extends Specification {
"My Spec" >> {
xxx(42)
}
def xxx(i: Int) = {
def e1 = {
println(s"** $i > 0")
i must be_>(0)
}
def e2 = {
println(s"** $i < 100")
i must be_<(100)
}
"i should be > 0" in new iii { e1 }
"and < 100" in new iii { e2 }
}
}
我有以下规格:
import org.specs2.mutable.{After, Specification}
import org.specs2.specification.Scope
import org.specs2.specification.core.{Fragment, Fragments}
class TestRefSpec extends Specification {
"My Spec" >> new iii {
xxx(i)
}
def xxx(i: Int) = {
def e1 = {
println(s"** $i > 0")
i must be_>(0)
}
def e2 = {
println(s"** $i < 100")
i must be_<(100)
}
"i should be > 0" >> { e1 }
"and < 100" >> { e2 }
}
}
trait iii extends Scope with After {
val i = 142
def after = println("finalising")
}
这个想法是,有一个测试某些行为的规范,然后有由测试行为的范围表示的目标。 理想情况下,这些行为将位于一个单独的特征中。 唉,当我 运行 虽然我得到的输出如下:
[info] TestRefSpec
[info] + My Spec
[info] Total for specification TestRefSpec
[info] Finished in 560 ms
[info] 1 example, 0 failure, 0 error
这意味着测试并不真正 运行。
有谁知道我如何真正实现我的目标?
提前致谢!
我认为问题在于您将 xxx(i)
方法调用包装在 new iii {}
.
这行不通,因为 curlies 中的代码是在扩展 iii
的新匿名 class 的构造函数中执行的,并且整个表达式的结果是 iii
,而不是 Fragments
,所以你从 xxx()
方法内部构造和 return 的例子的内部结构,不能符合 specs2 >>
操作员。
通常只有个别示例 - 前面有 specs2 in
运算符被包裹在一个范围内。
这会起作用:
class TestRefSpec extends Specification {
"My Spec" >> {
xxx(42)
}
def xxx(i: Int) = {
def e1 = {
println(s"** $i > 0")
i must be_>(0)
}
def e2 = {
println(s"** $i < 100")
i must be_<(100)
}
"i should be > 0" in new iii { e1 }
"and < 100" in new iii { e2 }
}
}