簡體   English   中英

GroovyShell 腳本需要調用本地方法

[英]GroovyShell script needs to call local methods

我需要從字符串創建腳本並在當前測試 class 的上下文中執行它。這是我的簡化代碼:

import spock.lang.Specification

class MyTestSpec extends Specification {
    Integer getOne() { return 1 }
    Integer getTwo() { return 2 }

    void 'call script with local methods'() {
        given:
        GroovyShell shell = new GroovyShell()
        Script script = shell.parse("getOne() + getTwo()")

        when:
        def result = script.run()

        then:
        result == 3
    }
}

這給了我以下錯誤:

No signature of method: Script1.getOne() is applicable for argument types: () values: []

我看到要設置變量可以使用shell.setProperty但如何將方法的實現傳遞給腳本?

當然,我一發布這個,就找到了我的答案。

import org.codehaus.groovy.control.CompilerConfiguration
import spock.lang.Specification

class MyTestSpec extends Specification {
    Integer getOne() { return 1 }
    Integer getTwo() { return 2 }

    void 'call script with local methods'() {
        given:
        CompilerConfiguration cc = new CompilerConfiguration()
        cc.setScriptBaseClass(DelegatingScript.name)
        GroovyShell sh = new GroovyShell(this.class.classLoader, new Binding(), cc)
        DelegatingScript script = (DelegatingScript) sh.parse("getOne() + getTwo()")
        script.setDelegate(this)

        when:
        def result = script.run()

        then:
        result == 3
    }
}

暫無
暫無

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

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