Spock 框架:间谍问题

2023-12-14

我在 Spock 中使用 Spy 时遇到问题,它要么无法正常工作,要么我的理解是错误的,所以我试图澄清这一点。 考虑这段代码(Java):

public class CallingClass {

    public String functionOne() {
        //does stuff
        return "one";
    }

    public String functionTwo() {
        String one = functionOne();
        return "some string " + one;
    }
}

现在我想测试一下这个事实functionTwo calls functionOne以及定义返回值functionOne(想象一下,如果functionOne真的很复杂,我不想在测试中执行它,只是想存根它并将其设置为返回某个值)。为此,我在 Groovy 中编写了以下测试(使用 Spock):

class CallingClassTest extends Specification {

    def "check that functionTwo calls functionOne"() {
        def c = Spy(CallingClass)
        c.functionOne() >> "mocked function return"

        when:
        def s = c.functionTwo()

        then:
        1 * c.functionOne()
        s == "some string mocked function return"
    }
}

为了做这样的事情,Spock 要求我拥有cglib库,所以我的构建文件(在 Gradle 中)看起来像这样:

apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy:latest.release'

    testCompile 'org.spockframework:spock-core:latest.release'
    testCompile 'junit:junit:latest.release'
    testCompile 'cglib:cglib-nodep:latest.release'

}

现在,当我运行测试时,我期望functionOne根本不会被调用,而是使用我的存根版本。相反,我得到这个:

Condition not satisfied:

s == "some string mocked function return"
| |
| false
| 19 differences (44% similarity)
| some string (-)o(-------)n(-------)e(----)
| some string (m)o(cked fu)n(ction r)e(turn)
some string one

Condition not satisfied:

s == "some string mocked function return"
| |
| false
| 19 differences (44% similarity)
| some string (-)o(-------)n(-------)e(----)
| some string (m)o(cked fu)n(ction r)e(turn)
some string one

    at CallingClassTest.check that functionTwo calls functionOne(CallingClassTest.groovy:17)

更重要的是,如果我调试它并设置断点functionOne它被称为:(

我缺少什么?我的测试不应该使用存根吗functionOne提供并仅返回字符串"mocked function return"?


它应该是:

@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
@Grab('cglib:cglib-nodep:3.1')

import spock.lang.*

class CallingClassTest extends Specification {

    def "check that functionTwo calls functionOne"() {
        def c = Spy(CallingClass)

        when:
        def s = c.functionTwo()

        then:
        1 * c.functionOne() >> "mocked function return"
        s == "some string mocked function return"
    }
}

public class CallingClass {

    public String functionOne() {
        "one"
    }

    public String functionTwo() {
        String one = functionOne()        
        "some string $one"
    }
}

当您进行间谍/模拟并验证时,这就是应该指定返回值的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spock 框架:间谍问题 的相关文章

  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • Swift 中的不可变/可变集合

    我指的是 Apple 的 Swift 编程指南 以了解用 Swift 语言创建可变 不可变对象 数组 字典 集合 数据 但我无法理解如何在 Swift 中创建不可变集合 我希望看到 Swift 中 Objective C 中的等价物 不可变
  • Boost::signals2 - 使用槽解析对象

    考虑一下 include
  • 具有自定义 VPN 连接的 iOS 应用程序

    我想创建可以使用 PPTP L2TP 或 OpenVPN 连接到 VPN 的应用程序 但我找不到任何有关此的信息 仅在ios 8 SDK中找到有关使用IPSec和IKEv2的信息 如果您想在 ios 8 中以编程方式连接 则只能使用 IPS
  • iPhone Mapkit 将自定义图像和图钉添加到注释中

    我正在尝试将图钉颜色从默认红色更改为自定义图像 但我所做的任何尝试都不起作用 我从这个网站下载了示例代码 http icodeblog com 2009 12 21 introduction to mapkit in iphone os 3
  • 将 UIActivityIndi​​cator 添加到模态视图(ELCimagepicker)

    我已将 ELCimagepicker https github com Fingertips ELCImagePickerController 添加到我的项目中 它运行良好 允许用户为幻灯片选择多个图像 但是 当您单击 保存 时 可能会出现
  • ASP.net AJAX 拖/放?

    我想知道是否有人知道是否有一个预先制定的解决方案 我在 ASP net 网站上有一个列表 我希望用户能够通过拖放对列表进行重新排序 此外 我希望有第二个列表 用户可以将第一个列表中的项目拖到其中 到目前为止 我找到了两个解决方案 重新排序列
  • 构建三元网格,在 Matlab 中评估网格上的函数和等高线图

    我需要评估一个函数 比如说 Fxy 2 x 2 3 y 2 在三元网格 x 范围 0 1 y 范围 0 1 和 1 x y 0 1 上 我无法构建需要评估上述函数的三元网格 另外 一旦评估 我需要在三元等高线图中绘制函数 理想情况下 我需要
  • HTML 敏捷包 - 删除不需要的标签而不删除内容?

    我在这里看到了一些相关的问题 但它们并没有完全讨论我面临的同一问题 我想使用HTML 敏捷包从我的 HTML 中删除不需要的标签 而不会丢失标签内的内容 例如 在我的场景中 我想保留标签 b i and u 对于这样的输入 p my par
  • 如何为 Google App Engine 应用程序编写“app.yaml”文件?

    我注册了一个 Google App Engine 应用程序 并且有以下一些文件 index html tabs css tab js temp py 我应该怎样写app yaml file 您应该将静态文件放入某个目录中 例如staticd
  • 在 NumPy 数组中使用 array.dtype = 分配 dtype 值会产生不明确的结果

    我是编程和 numpy 的新手 在阅读教程并在 jupyter notebook 上进行实验时 我想到按如下方式转换 numpy 数组的 dtype import numpy as np c np random rand 4 10 prin
  • 使用 Prolog 计算多项式的 GCD

    标题已经说明了一切 我正在计算两个多项式的 GCD 有什么办法可以在 Prolog 中完成这个任务吗 如果是这样 什么是好的起点 具体来说 我在如何使用 Prolog 实现多项式除法方面遇到了麻烦 编辑以包括示例输入和输出 输入示例 GCD
  • 将 varchar 转换为十进制棒球平均值

    我上传了一个 CSV 文件 它自动将我的所有列转换为 varchar 我需要将值 22 30 转换为 0 223 alter table badv2018 alter column BB Percent decimal 4 3 但我收到错误
  • 柱形图 Microsoft 图表控件 y 轴的百分比值

    我正在尝试获取柱形图 其中我需要在 y 轴上有百分比值并且应该重新计算和缩放 我看到了一些分配最小值和最大值的建议 chart ChartAreas 0 AxisY Minimum 0 但它不会根据百分比调整列高 任何帮助将不胜感激 以下是
  • Windows“Path”环境变量如何工作?

    当这个问题突然出现在我的脑海中时 我最近将 python 添加到了我的环境变量中 当我在命令提示符中输入 python 时 Windows 似乎知道要运行哪个文件 但是 我将 python 添加到这个名为 Path 的环境变量中 并且从未在
  • Windows Phone 8 从手机库获取拍摄的照片

    我正在互联网上搜索如何在我的应用程序中执行此操作 似乎有很多类似以下的指南 http msdn microsoft com en us library windowsphone develop microsoft xna framework
  • 为什么这个 go 代码不使用 goroutine 打印任何内容[重复]

    这个问题在这里已经有答案了 我一定错过了关于 goroutine 的一些非常基本的东西 但是我环顾四周 我看不出有任何理由为什么这不起作用 package main import fmt func main for i 0 i lt 20
  • React-beautiful-dnd 无法与 React-virtualized Table 组件一起正常工作

    预期行为 当从上到下拖动时 行应该被拖动到其目标索引 反之亦然 实际行为 从底部索引拖动到顶部索引时 行不会获得 DnD 从上到下拖动可以工作 但该项目会添加到最后一页索引之后 而不是添加到目标索引 DnD 动画似乎效果不佳 重现步骤 您可
  • 如何以相反的顺序保存panda中的拆分数据?

    您可以使用它来创建数据框 xyz pd DataFrame release 7 June 2013 2012 31 January 2013 February 2008 17 June 2014 2013 我正在尝试使用以下命令将数据拆分并
  • Mockito:将真实对象注入私有@Autowired字段

    我正在使用 Mockito 的 Mock and InjectMocks注释将依赖项注入到用 Spring 注释的私有字段中 Autowired RunWith MockitoJUnitRunner class public class D
  • Spock 框架:间谍问题

    我在 Spock 中使用 Spy 时遇到问题 它要么无法正常工作 要么我的理解是错误的 所以我试图澄清这一点 考虑这段代码 Java public class CallingClass public String functionOne d