簡體   English   中英

Spock框架:間諜問題

[英]Spock Framework: problems with spying

我在Spock中使用Spy有一個問題,它要么不能正常工作,要么我的理解是錯誤的,所以我試圖弄清楚這一點。 考慮這段代碼(Java):

public class CallingClass {

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

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

現在,我想測試的事實functionTwo調用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設置一個斷點,它會被調用:(

我錯過了什么? 我的測試不應該使用stubbed 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"
    }
}

當您同時進行間諜/模擬並驗證時,應該如何指定返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM