我以为我已经理解了斯波克的交互,但我必须管理,我仍然错过了一些部分的图片。
好了,这里是我的问题:我在Grails服务中有一个方法,它执行一些操作,包括调用同一个服务类的void方法。代码如下:
class myService {
void myStuff(def myObj, params) {
// do my stuff
anotherMethod(myObj)
//do my stuff again
}
void anotherMethod(myObj) {
// do other stuff
}
}
void 'test myStuff method'() {
given: 'my object and some params'
// doesn't really matter what I'm doing here
MyObject myObj = new MyObject()
params = [title: 'my object']
when: 'we call myStuff()'
service.myStuff(myObj, params)
then: 'anotherMethod() is called exactly one times'
1 * service.anotherMethod(myObj)
}
}
Too few invocations for:
1 * service.anotherMethod(myObj) (0 invocations)
你觉得呢?怎么了?
一如既往,提前感谢。
您要求的是一种非常特殊的、通常不受欢迎的模拟形式,称为部分模拟,在这种模拟中,被测试类上的方法被模拟。Spock从0.7开始就支持这一点,但是您必须创建spy()
而不是mock()
。还要注意,您不能模拟私有方法。有关间谍的更多信息,请参见参考文档。
下面是源代码和测试代码,有人能让我知道我做错了什么吗?似乎根本没有调用dao mock并返回“USA”。我在网上做了一些研究,找不到我做错了什么。 下面是我的Spock测试代码:
我用代码编写了以下旧方法,用于访问服务类中的请求对象,例如:
null
编辑: 链接到repo示例:https://gitlab.com/bartekwichowski/spock-too-many
问题内容: 我正在尝试测试一种简单的服务方法。该方法主要只是返回条件查询的结果,我要 测试 该条件查询 是否返回一个结果 (取决于要查询的内容)。 问题是,我不知道如何正确纠正相应的测试。我试图通过spock来实现它,但是用任何其他测试方法进行同样的测试也失败了。 可以告诉我如何修改测试以使其适合当前任务吗? (顺便说一句,如果可能的话,我想对其进行单元测试。) EventService方法 Sp