2017-06-01 53 views
1

我定義了一個Groovy腳本,其中包括一個內部類是否可以從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())  
    } 
} 

是否有可能引用在Groovy腳本中定義的類?如果是這樣,怎麼樣?

回答

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腳本加載了一些你想要在testcase中訪問的類,你必須通過相同的shell類加載器來完成,否則可能會出現奇怪的錯誤,如could not assign String to String ...

相關問題