- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的方法。它调用另一个软删除 API key 的方法,然后调用另一个方法来创建一个新的并返回它。
测试也在下面,它只是检查这两种方法是否被正确调用。但是,尽管这两种方法仍然出现 0 调用错误。是什么导致了这个问题?
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 的模拟机制,而不是您的业务代码。您还没有向我们展示您的测试规范的完整类(class),但是根据您的场景,我们可以假设 service
在你的测试中只是一个模拟。如果这是真的,那么你不能指望这两个调用:
then:
1 * service.deleteApiKeyPair(apiKeyPair)
1 * service.createApiKeyPair(apiKeyPair.label, apiKeyPair.accountMode, apiKeyPair.source)
service.updateApiKeyPair(apiKeyPair, true)
在
when
中的真实对象上子句,然后您可以检查是否创建了新的 API key 对(并保存在您使用的存储中)以及旧的 key 对是否不再存在。与仅检查调用相比,此类测试至少有一些好处:
service.updateApiKeyPair()
的实现在任何时候,只要它产生相同的结果,您的测试仍然有用(因为测试不会像调用测试那样限制您的实现),ConcurrentMap<K,V>
.多亏了这一点,您仍然可以将测试作为单元测试运行,并且您可以测试是否使用
createNewKey
更新 API key 对。参数设置为
true
完全符合您的期望。或者,您可以编写一个带有 H2 数据库替换的集成测试,但这只会使您的测试 Bootstrap 更长。这是你的选择。
Spy
对象
(Think twice before using this feature. It might be better to change the design of the code under specification.)
Source: http://spockframework.org/spock/docs/1.0/interaction_based_testing.html#spies
关于unit-testing - 基于 Spock 交互的测试 : too few invocation on a method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51005634/
为什么Intellij会给出这个警告,这是什么意思,我怎样才能让它变得更好? import akka.actor.Props object Router { def props(config: C
我在两个类中使用react-native-image picker和react-native-image-crop picker库。 一个是启动库图像(react-native-image picke
晚上好, 我刚开始使用 Microsoft.Contracts(最新版本)并将其插入示例界面之上,现在它看起来像这样: namespace iRMA2.Core.Interfaces { us
我尝试制作用于 Symfony 2 上传的 ajax 脚本。Chrome 返回此错误: Uncaught TypeError: Illegal invocation jquery.min.js:4 我
我正在尝试在 java 中运行一些 javascript。我不确定脚本是否正确,我想在一段时间后终止调用。这就是我运行脚本的方式。 returnMethod = invocableEngine.inv
我正在为一个服务类编写 Spock 测试,该服务类的方法在 spring boot 应用程序中调用 Dao 类中的另一个方法。但是,我得到: Too few invocations for: 1
我们正在运行一个 Create React App (CRA) Web 应用程序,我们已向其中添加了 Google Analytics v4。我们使用 ga-4-react 启动分析npm 包。 in
我想将多个图像对象发布到 testphp.php。但控制台打印错误说非法调用。 我已经尝试过: submit $("#sub").click(function(){ // get th
当文本框为空时尝试禁用按钮时,我在 google chrome 控制台中收到此错误: function isEmpty() { var r = document.getElementById;
这是 html 这是脚本 $('#submit').click(function() { var files = $("[type='file']")[0].fil
我尝试通过ajax提交表单,下面是表单。 Date Upload File
我想弄乱 Speech Recognition API,所以我从简单的页面开始,该页面在单击 body 元素时开始识别。我的 scripts.js 文件是: var recognition = new
我在 Google 上进行了搜索,也浏览了 Stack 上提供的一系列类似问题,但不幸的是没有一个能帮助我解决问题。 下面是我正在做的事情,我从主视图调用 PartialView,但我的 Partia
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
为简单起见,我们来看一个非常简单的类: public class TestingClass { public void method1(){ System.out.printl
编辑:到目前为止建议的答案都不起作用。 我正在使用 django 运行此调用。第一次运行时,服务器返回“n_usr”(这会更改用户文件的形式)。第二次,它只是抛出一个非法调用错误。 function
每当我必须使用 gcloud 部署新的 python 函数时sdk 我收到这条消息 Allow unauthenticated invocations of new function [functio
这个问题已经有答案了: getUserMedia() in JavaScript normalizes across browsers. Illegal Invocation (1 个回答) 已关闭
我试图通过发布一些 xml 来登录来测试登录 Web 服务,但它再次出现此错误: 未捕获的类型错误:非法调用 这是代码: $(document).ready(function() { var da
function submit() { console.log('Submit!'); } function foo(callback, param) { console.log(ca
我是一名优秀的程序员,十分优秀!