【发布时间】:2018-10-05 09:27:24
【问题描述】:
我在使用 spock 框架创建测试数据时遇到问题。 为了遵循“组合而不是继承”,我有一个类来为我的单元测试创建测试数据。作为一个简单的截图,它看起来像这样:
class TestData extends Specification{
Foo createFoo(){
GroovyMock(Foo){
doSomething() >> "MOCKED!"
}
}
}
当我编写一个测试时,我喜欢测试该方法是否被调用以及多久被调用一次。像这样
def "simple test"(){
given:
TestData testData = new TestData()
Foo foo = testData.createFoo()
when:
println foo.doSomething()
then:
1 * foo.doSomething()
}
我知道,这个测试没有意义。这只是为了说明行为。
我希望该测试的“绿色结果”,因为 doSomething() 已被调用 1 次。但是测试结果是红色的:
Too few invocations for:
1 * foo.doSomething() (0 invocations)
[...]
当我直接模拟 Foo 时,一切正常:
def "simple test"(){
given:
Foo foo = GroovyMock(Foo){
doSomething() >> "MOCKED!"
}
when:
println foo.doSomething()
then:
1 * foo.doSomething()
}
有人知道如何在不从 TestData 派生我的测试类的情况下处理这个问题吗?
顺便说一句。我使用了返回“MOCKED!”的存根。展示,模拟作品。但是,当 testData 创建模拟时,它并没有“覆盖”或其他任何名称。
【问题讨论】:
标签: unit-testing testing groovy spock