Dav*_*vid 2 groovy unit-testing spock
我编写了一个Groovy扩展库,为List类添加了额外的方法.我正在尝试使用Spock为此编写测试,但我无法让我的一些测试工作.
代码
有许多方法都具有相同的形式.我添加了与tail()(或head(),first()等)相同的方法但是null如果List为空则返回,而不是抛出异常.下面显示了一个示例(println()s用于故障排除):
public static def tailIfAny(List list) {
println "tailIfAny() list.size(): ${list.size()}"
def r = list.size() ? list.tail() : null
println "r: $r"
return r
}
Run Code Online (Sandbox Code Playgroud)
我想要进行两项测试tailIfAny().如果在空List上调用该方法,第一个测试应该检查是否没有抛出异常.这很简单,也很有效.我想写的另一个测试是检查tail()如果列表不为空则调用.
考试
tail()如果List不为空,这是我检查调用的测试:
def "tailIfAny() calls tail()"() {
setup:
def list = Spy(ArrayList)
list << 'a'
list << 'b'
when:
println "list ${list} -- ${list.size()}"
println "Before tailIfAny()"
list.tailIfAny()
println "After tailIfAny()"
then:
1 * list.tail()
}
Run Code Online (Sandbox Code Playgroud)
错误消息
当我运行测试时,我收到此失败消息:
Too few invocations for:
1 * list.tail() (0 invocations)
Unmatched invocations (ordered by similarity):
1 * list.toArray()
1 * list.iterator()
3 * list.size()
1 * list.isEmpty()
at org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:78)
at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:76)
at com.fgi.extensions.ListExtensionsTests.add element in setup(ListExtensionsTests.groovy:65)
但是从stdout输出(下面)我可以看到tail()应该被调用.
测试标准出来了
list [a, b] -- 2 Before tailIfAny() tailIfAny() list.size(): 2 r: [b] // This tells me that tail() is being called. After tailIfAny()
谁能解释为什么Spock认为tail()没有被召唤?或者我在这里发生了什么事我错过了?
谢谢.
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |