2017-06-01 10 views
1

私は内部クラスにGroovyTestCaseから.groovyスクリプトで定義されたクラスをインポートすることはできますか?

foo.groovy含まれて定義されたグルーヴィーなスクリプト、持っている:私は、スクリプト内のクラスを定義しているのはなぜ

// does something 

Bar { 
    int foobar() { 
    return 1 
    } 
} 

// Does something else 

は長い話ですが、私はしない限り、それは、必要です

とにかく、私はこのクラスを呼び出すGroovyTestCaseを持っています。

私はこのような何かをしたい:

class Test extends GroovyTestCase { 
    void testSomething() { 
    Bar bar = new Bar() 
    assertTrue(1, bar.foobar())  
    } 
} 

はグルーヴィースクリプト内で定義されたクラスを参照することが可能ですか?もしそうなら、どうですか?

答えて

2

foo.groovy

println "foooo 01" 

class Bar { 
    int foobar() { 
    return 1 
    } 
} 

println "foooo 02" 

Test.groovy(あなたはクラスとしてそれを作ることができます)

def shell = new GroovyShell() 
//parse script 
def script = shell.parse(new File("/11/foo.groovy")) 
//get class loader used for script parsing 
def cl = shell.getClassLoader() 
//get list of parsed/loaded classes 
println cl.getLoadedClasses() // [class Bar, class foo] 

def bar = cl.loadClass('Bar').newInstance() 
println bar.foobar() // 1 

しかし、注意してください! foo.groovyスクリプトがテストケースでアクセスしたい他のクラスをロードしている場合は、同じシェルクラスローダーを使用しなければなりません。could not assign String to String ...

のような奇妙なエラーが発生する可能性があります。
関連する問題