2014-09-22 44 views
0

我一直在尝试存根方法返回Long,但我所得到的是null。有没有办法做到这一点?如何在Spock中返回Long的存根方法?

interface Clock { 
    Long currentTimeMillis(); 
} 

def "stub method returning long"() { 
    Clock clock = Mock(Clock) 
    clock.currentTimeMillis() >> 1 

    when: 
    Long currentTime = clock.currentTimeMillis() 

    then: 
    currentTime == 1 
    1 * clock.currentTimeMillis() 
} 

def "mock method returning longs"() { 
    Clock clock = Mock(Clock) 
    clock.currentTimeMillis() >>> [1, 2, 3] 

    when: 
    Long currentTime = clock.currentTimeMillis() 

    then: 
    currentTime == 1 
    1 * clock.currentTimeMillis() 
} 

在两个测试中我发现了以下错误:

Condition not satisfied: 

    currentTime == 1 
    |   | 
    null  false 
+0

你试过'clock.currentTimeMillis()>> 1L'不知道这是否会帮助强硬 – 2014-09-22 15:24:48

+0

@tim_yates是的,我做了同样的结果 – delor 2014-09-22 15:26:20

回答

2

即使你们俩模拟和记录的行为,应定义如下。

下面是它如何工作的:

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

import spock.lang.* 


class Test extends Specification { 
    def "stub method returning long"() { 
     given: 
     Clock clock = Mock(Clock) 

     when: 
     Long currentTime = clock.currentTimeMillis() 

     then: 
     currentTime == 1 
     1 * clock.currentTimeMillis() >> 1 
    } 

    def "mock method returning longs"() { 
     given: 
     Clock clock = Mock(Clock) 

     when: 
     Long currentTime = clock.currentTimeMillis() 

     then: 
     currentTime == 1 
     1 * clock.currentTimeMillis() >>> [1, 2, 3] 
    } 
} 

interface Clock { 
    Long currentTimeMillis(); 
} 
+2

仅供参考。如果可读性很重要,我们也可以在'given'块中定义模拟/存根,而不是'then'。 :) – dmahapatro 2014-09-22 15:49:38

+1

@dmahapatro感谢您指出 – delor 2014-09-22 15:57:08

相关问题