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

在Spock框架Java测试中模拟映射参数

云宜人
2023-03-14

我很难在Java项目中使用Spock框架进行测试。我有以下内容:

 - Person.class 
 - Attribute.class 
serviceClass.call(Map<Person, List<Attribute>> map)
serviceClass.call(_) >> MockReturnObject

但是,对于我的具体情况,我需要指定我传入的Person对象,并为其分配一个特定的MockReturnObject。比如:

serviceClass.call([(PersonA):_)]) >> MockReturnObjectA

def listWildcard = _
serviceClass.call(Map.of(PersonA, listWildcard)) >> MockReturnObjectA

这两种方法都不起作用,调用最终返回null而不是MockReturnObjectA(我认为这是因为它无法匹配参数)。不幸的是,我对Spock没有太多的经验,我试图搜索关于在这种情况下处理地图的文档,但没有取得成功。我将非常感谢任何人能够提供任何指导。

List<Attribute> list = getAttributeList() 

entryClass.process(List<Person> personList) {
        personList.forEach(person -> serviceClass.call(Map.of(person, list))
   }
entryClass.process([PersonA, PersonB, PersonC])

所有3个都被模仿(person.class)和他们自己的行为。

共有1个答案

云浩然
2023-03-14

当您使用对象作为参数时,Spock将使用Groovy相等性来比较参数。但是,如果构造引用对象过于复杂,则可以使用代码参数约束来以编程方式检查实际参数

serviceClass.call({ it[PersonA] == attributeList }) >> MockReturnObject

由于您共享的代码很少,这是我能给出的最好的示例。

 类似资料:
  • 在运行spock测试时,我需要帮助模拟一个类及其从yaml文件获得的数据。我有一个用groovy编写的microservice,它根据yaml文件中的字段名参数进行字段映射。 我有一个projectProperties类,它从yaml文件中提取数据。 这个类将从 /src/main/resourcesapplication.yaml文件中提取变量值 当我运行spock测试时,它无法从project

  • 我用代码编写了以下旧方法,用于访问服务类中的请求对象,例如:

  • 我试图用Maven在SPOCK groovy框架中测试静态java方法。 下面是java类 下面是groovy中的SPOCK测试 和POM文件片段 我在groovy文件夹中有4个测试用例,3个通过,但是这个静态方法测试给出了错误 我正在运行mvn测试来测试这些junits,我尝试将cglib-nodep的版本从3.1更改为2.2.2,但没有成功。 我在包含jar文件之后签入了java构建路径 我还

  • 我正在使用Sprock和Spring,当我嘲弄我的一个组件类时,我得到了错误。 > CGLIB-NODEP:3.2.0 CGLIB:3.2.0 Spock-Core:1.0-groovy-2.4 Spring-测试:4.1.4.释放 java.lang.NoClassDefoundError:无法初始化类org.spockframework.mock.runtime.proxybasedmockf

  • 我不明白Spock测试中Mock、Stub和Spy之间的区别,我一直在网上看的教程也没有详细解释它们。