来自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 但是我不能从这个报告中判断它是没有通过null约束还是没有通过max约束验证,然后我需要检查测试源代码中失败的行号。
至少用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子句的所有类型,以便它们显示在失败报告中,以便您知道实际失败的是什么?这些"when“和"then”文本描述符是仅用作内部源代码文档,还是在其他地方使用?
发布于 2014-12-03 07:04:18
块描述主要用于较高级别的测试;它们很少用于单元测试。也就是说,Spock有几个第三方报告扩展:
至少其中的一部分还将输出块描述。此外,它还计划在下一个Spock版本中提供开箱即用的高级报告功能。
与其让一个测试检查两个不相关的用例(就像您的Spock/JUnit示例中那样),不如让一个单独的测试为每个用例提供一个描述性名称。Spock的数据驱动测试可以帮助实现这一点。
虽然可以为Spock条件(例如assert 1 == 2, "not quite")添加描述,但我几乎总是更喜欢默认的"power assert“输出。
为了回答你的标题问题,编写良好的Spock测试通常比JUnit测试要少得多。
https://stackoverflow.com/questions/27260020
复制相似问题