是否可以从GroovyTestCase导入.groovy脚本中定义的类?

时间:2017-06-01 13:14:57

标签: unit-testing groovy junit

我定义了一个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脚本中定义的类?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

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 ...