【问题标题】:Spock: how can I mock a list of objects which return the object I haveSpock:如何模拟返回我拥有的对象的对象列表
【发布时间】:2014-10-09 17:12:14
【问题描述】:

我有一个对象列表,让它是整数:

list = [1, 3, 8]

我需要一个对象列表,这些对象实际上是这些整数的提供者。即:

providersList = [p1.getInteger() = 1, p2.getInteger() = 3, p3.getInteger() = 8] //pseudo code

如何编码?

更新

抱歉,我好像有点糊涂了。这是我第一次接触 Spock,所以我可能会混淆术语和想法。

我想模拟一个对象列表。当然,每个对象都有自己的方法。测试将只调用该对象的一种方法。我不需要实现它,因为我知道究竟是什么返回了这个方法。这些返回值存储在我已经拥有的一些列表中。

即我需要模拟一个对象列表 [p1, p2, p3],其中对 object.getInteger() 的每次调用都会返回一些我已经知道的整数,并且我有一个这些整数的列表:[i1, i2, i3]: p1。 getInteger() = i1 等

如何在列表 [i1, i2, i3] 的帮助下模拟 [p1, p2, p3] 列表?

【问题讨论】:

  • 我不确定你在问什么?
  • 你的意思是像[providersList = [{->1}, {->3}, {->8}]?我也很困惑
  • providersList = [p1, p2, p3];那么providersList.get(0).getInteger()呢?
  • 对不起,我已经更新了这个问题。可能很简单,我只是从Spock开始。

标签: groovy spock


【解决方案1】:

你可以试试:

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

import spock.lang.*

class Test extends Specification {
    def 'some spec'() {
        given:    
        def mocks = [1, 2, 3].collect { i -> GroovyMock(SomeClass) {
             getInteger() >> i
           } 
        }

        expect:
        mocks*.getInteger().containsAll([1,2,3])
    }
}

class SomeClass {
    Integer getInteger() {
        0
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2016-05-23
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多