2017-06-01 54 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 ...

相关问题