当前位置: 首页 > 知识库问答 >
问题:

在Gradle单元测试中使用Spock通配符的问题

夹谷岳
2023-03-14
1 * mockGoogleCalendarClient.bookTimeSlot(_)

当它运行时,我得到以下信息:

Test不定义或继承接口groovy.lang.GroovyObject的解析方法'Abstract java.lang.Object getProperty(java.lang.String)'的实现。

只有当我在测试中使用通配符时才会发生这种情况。我试着把这个错误弄清楚,但到目前为止还没有。为了取得进展,我将所描述的方法添加到测试中,如下所示:

@Override
public Object getProperty(String value)
{
  return new Object()
}

共有1个答案

申屠泉
2023-03-14

在https://github.com/jeffbrown/toronaga07,Spock就是一个工作示例。

Build.Gradle

plugins {
    id 'groovy'
}

repositories {
    jcenter()
}

dependencies {
    implementation 'org.codehaus.groovy:groovy-all:3.0.7'
    testImplementation 'org.spockframework:spock-core:2.0-M4-groovy-3.0'
}

test {
    useJUnitPlatform()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

src/main/groovy/toronaga07spock/calendarhelper.groovy

package toronaga07spock

class CalendarHelper {

    CalendarClient client

    void book(String message) {
        client.bookTimeSlot message
    }
}
package toronaga07spock

interface CalendarClient {
    void bookTimeSlot(String s)
}
package toronaga07spock


import spock.lang.Specification

class CalendarHelperSpec extends Specification {

    def "test a basic mock"() {
        given:
        def helper = new CalendarHelper()
        def mockGoogleCalendarClient = Mock(CalendarClient)
        helper.client = mockGoogleCalendarClient

        when:
        helper.book 'Some Booking Message'

        then:
        1 * mockGoogleCalendarClient.bookTimeSlot(_)
    }
}
 类似资料:
  • 我正在将Grails2中的一系列单元测试升级到Grails3,并在使用Spock数据驱动测试格式驱动测试的域测试中遇到问题。 当我执行测试时,因为测试执行没有填充测试中的错误、字段和val引用。如前所述,这个测试适用于Grails2.5.5,所以我怀疑我缺少了Grails3中需要的一些东西。 Edited:我删除了原来在setup()中的mockForConstraints()调用,使其无效。

  • 在以前的一个项目中,我使用Spock测试框架对Java代码进行单元测试。我发现这非常有效,所以我尝试将Spock测试添加到我当前的项目中,该项目使用Maven作为构建工具(前一个项目使用Gradle)。虽然我可以让Maven编译我的Spock测试(使用),但我无法让Maven运行这些测试。 我做了一个简单的例子来演示我在两个文件中的问题: null 当我执行(或)时,我希望运行单个单元测试并失败。

  • 在如何模拟Grails单元测试中使用的自动有线依赖方面,我可以提供一些建议。我省略了大部分不必要的代码,只给出了测试类和被测试文件类中的相关方法 如果不对此依赖性进行攻击或嘲弄,我就会得到错误 我尝试存根密码编码器并让它返回true 但这会给出一条错误消息: 有什么方法可以用Spock来嘲笑这种依赖吗?

  • 我正在尝试使用intellij idea运行单个spock单元测试。 考虑: 在上面的测试中,当我转到测试主体和右上下文菜单时,我得到了两种类型的测试。一个是grails测试,另一个是junit测试。 关于这个问题,公认的答案建议使用jUnit运行程序。但是使用它,代码根本无法编译(可能是因为某些插件和其他类不可用)。 (我不确定,因为这是期望的行为,因为我只是运行一个测试,而不是所有的测试。所以

  • 在一个多模块的Android项目中,我有一个其他Android库和应用程序依赖的普通Java项目。我最近将整个项目迁移到使用Gradle构建。 我在运行纯Java项目的junit测试时遇到了一个问题,仅在Android Studio中。在命令行上,测试运行正常: 这将按预期执行单元测试,如果我插入一个作为健全性检查,我将正确地获得预期的失败。 但是,我无法在Android Studio中运行单元测

  • 问题内容: 我的意图是使用API中描述的JUnit方法来验证类中的一种方法。 但是Eclipse向我显示了无法识别这种方法的错误消息。这两个进口到位: 我错过了什么? 问题答案: 这应该适用于JUnit 4: (答案基于此Wiki文章) 这与旧的JUnit框架(JUnit 3)相同: 注意区别:没有注释,测试类是TestCase的子类(实现静态断言方法)。