来自JUnit背景我不太了解spockD测试中所有文本的要点,因为他们不会在测试的输出上显示。
所以例如,如果我对一个字段Double foo有一个约束,其约束为foo max:5,nullable:false
我写这样的测试:
void "test constraints" {
when: "foo set to > max"
foo=6D
then: "max validation fails"
!foo.validate()
when: "foo is null
foo=null
then: "null validation fails"
!foo.validate()
}
测试在其来源中有详细记录,但如果验证失败,则错误输出不会利用我为确保测试清晰而进行的所有额外输入。
我得到的只是
Failure: |
test constraints(com.grapevine.FooSpec)
|
Condition not satisfied:
f.validate()
| |
| false
但是我无法告诉表单这个报告是否未通过空约束或最大约束验证,然后我需要检查测试源中的失败行号。
至少我可以做JUnit
foo=60D;
assertFalse("contraints failed to block foo>max", f.validate());
foo=null;
assertFalse("contraints failed to block foo=null", f.validate());
然后我会在失败报告中收到有用的信息。这似乎更简洁,并提供更丰富的测试失败报告。
是否有某种方法可以从Spec获得更强大的错误报告,利用所有这些输入的when和then子句,以便它们显示在失败报告中,以便您知道实际失败的是什么?这些"何时"然后"然后"文本描述符仅用作内部源文档或是否在某处使用?
答案 0 :(得分:5)
块描述主要用于更高级别的测试;它们很少用于单元测试。也就是说,Spock有几个第三方报告扩展:
其中至少有一些也会输出块描述。此外,它计划在下一个Spock版本中提供开箱即用的高级报告。
不是让一个测试检查两个不相关的情况(如在您的Spock / JUnit示例中),通常最好是为每个案例分别使用描述性名称进行测试。 Spock的数据驱动测试可以帮助解决这个问题。
虽然可以为Spock条件添加描述(例如assert 1 == 2, "not quite"
),但我几乎总是更喜欢默认的“power assert”输出。
要回答你的标题问题,精心编写的Spock测试通常比JUnit测试更少 罗嗦。