Java 斯波克:我如何将不同的实例传递给where子句并使调用计数工作?
我想为我的类编写两个测试用例:Java 斯波克:我如何将不同的实例传递给where子句并使调用计数工作?,java,unit-testing,spock,Java,Unit Testing,Spock,我想为我的类编写两个测试用例: 使用普通方法调用进行测试 使用引发RuntimeException的方法调用进行测试 为此,我创建了以下测试。但不幸的是,它不起作用:它以“调用太少”而结束,零而不是一 为什么? 代码: PS 此外,我还想将“共享”实例移动到fixture“setup”中,但我不能这样做:它无法说明SimpleSpockTest类没有属性“good”或“bad”。模拟对象不会以您想要的方式作为@shared字段。根据斯波克关于以下方面的文件: 交互总是限定在特定功能方法的范围内。
此外,我还想将“共享”实例移动到fixture“setup”中,但我不能这样做:它无法说明SimpleSpockTest类没有属性“good”或“bad”。模拟对象不会以您想要的方式作为
@shared
字段。根据斯波克关于以下方面的文件:
交互总是限定在特定功能方法的范围内。因此,它们不能在静态方法、setupSpec
方法或cleanupSpec
方法中声明。同样,模拟对象不应存储在静态或@Shared
字段中
换句话说,您必须在feature方法本身内部定义mock
您提到上面提供的示例已简化,但如果可能,您必须执行以下操作:
def "test invocations"() {
setup:
Simple good = Mock(Simple)
Simple bad = Mock(Simple)
bad.run() >> { throw new RuntimeException() }
when:
good.run()
bad.run()
then:
1 * good.run()
1 * bad.run()
}
模拟对象将不会以您想要的方式作为
@Shared
字段。根据斯波克关于以下方面的文件:
交互总是限定在特定功能方法的范围内。因此,它们不能在静态方法、setupSpec
方法或cleanupSpec
方法中声明。同样,模拟对象不应存储在静态或@Shared
字段中
换句话说,您必须在feature方法本身内部定义mock
您提到上面提供的示例已简化,但如果可能,您必须执行以下操作:
def "test invocations"() {
setup:
Simple good = Mock(Simple)
Simple bad = Mock(Simple)
bad.run() >> { throw new RuntimeException() }
when:
good.run()
bad.run()
then:
1 * good.run()
1 * bad.run()
}
看来这个测试毫无意义。你想达到什么目标?你的方案是什么?蛋白石,这只是一个简单的例子。在实际测试中,我想确保1)运行方法产生的异常被正确注册(这就是为什么我需要抛出异常的mock,我可以计算异常处理程序调用次数)2)运行方法被调用的次数正确。这个测试是一个简化的例子,但它不起作用。看起来这个测试毫无意义。你想达到什么目标?你的方案是什么?蛋白石,这只是一个简单的例子。在实际测试中,我想确保1)运行方法产生的异常被正确注册(这就是为什么我需要抛出异常的mock,我可以计算异常处理程序调用次数)2)运行方法被调用的次数正确。这个测试是一个简化的例子,但它不起作用。