AuthApiKeyPair updateApiKeyPair(AuthApiKeyPair apiKeyPair, Boolean createNewKey) {
AuthApiKeyPair newKeyPair
if (createNewKey) {
deleteApiKeyPair(apiKeyPair)
//The key will be created with the same info as the previous key.
newKeyPair = createApiKeyPair(apiKeyPair.label, apiKeyPair.accountMode, apiKeyPair.source)
}
newKeyPair
}
测试:
def "should soft delete key pair and create new one"() {
setup:
AuthApiKeyPair apiKeyPair = AuthApiKeyPair.build(acquirerId: 123, source: PaymentSource.BOARDING_API, label: 'Boarding API key')
when:
service.updateApiKeyPair(apiKeyPair, true)
then:
1 * service.deleteApiKeyPair(apiKeyPair)
1 * service.createApiKeyPair(apiKeyPair.label, apiKeyPair.accountMode, apiKeyPair.source)
}
如果您考虑一下您的测试,您就会意识到,在最好的情况下,它测试的是Spock的模拟机制,而不是业务代码。您还没有用您的测试规范向我们展示完整的类,但是根据您的场景,我们可以假设您的测试中的service
只是一个模拟。如果这是真的,那么就不能指望这两个调用:
then:
1 * service.deleteApiKeyPair(apiKeyPair)
1 * service.createApiKeyPair(apiKeyPair.label, apiKeyPair.accountMode, apiKeyPair.source)
发生。仅仅是因为mocked类不执行真正的方法。
(在使用此特性之前要三思而后行。根据规范更改代码的设计可能会更好。)
来源:http://spockframework.org/spock/docs/1.0/interaction_based_testing.html#spies
我不知道Grails是否有一个用于创建Spy而不是Mock的测试注释,但您可以始终遵循官方文档,创建普通的Spock单元测试,将服务实例化为Spy,然后可以尝试计算调用。不过,我不建议这么做,只是为了记录在案而提到这一点。
下面是源代码和测试代码,有人能让我知道我做错了什么吗?似乎根本没有调用dao mock并返回“USA”。我在网上做了一些研究,找不到我做错了什么。 下面是我的Spock测试代码:
我以为我已经理解了斯波克的交互,但我必须管理,我仍然错过了一些部分的图片。 好了,这里是我的问题:我在Grails服务中有一个方法,它执行一些操作,包括调用同一个服务类的void方法。代码如下: 你觉得呢?怎么了? 一如既往,提前感谢。
编辑: 链接到repo示例:https://gitlab.com/bartekwichowski/spock-too-many
我编写了一个Groovy扩展库,它为List类添加了额外的方法。我试图用Spock编写测试,但我无法让我的一些测试工作。 代码 有人能解释一下为什么Spock认为没有被调用吗?还是我错过了什么? 谢了。
英文原文:http://emberjs.com/guides/testing/testing-user-interaction/ 几乎所有的测试都有访问路由的一种固有模式,就是与页面进行交互(通过助手),然后检测期待的改变是否在DOM中发生。 例如: 1 2 3 4 5 6 test('root lists first page of posts', function(){ visit('/
我是Spock测试框架的新手,我试图为我正在工作的一个android项目做一些测试。我目前测试的这些对象是PJO,所以可以用常规的Spock测试它们。出于某种原因,我一直在我的一个对象上调用isAlive方法,但我知道它被调用了,感觉我已经在调试器中运行了它,它被调用了。所以我希望有人能引导我知道我做错了什么。 下面是我的测试代码: 任何帮助都将不胜感激。我已经在我能想到的每种配置中尝试过了...