在嵌入式Groovy中运行GroovyTestCase?

时间:2018-02-11 02:26:39

标签: java unit-testing groovy

如何在Java程序中运行的Groovy脚本中运行GroovyTestCase单元测试?

这里的用法是在SoapUI中运行GroovyTestCases。

鉴于:

class ExperimentClassTest extends GroovyTestCase {
    void testExperimentClass() {
        assertEquals( new ExperimentClass(name: "Hi").name, "Hi" )
    }
}
class ExperimentClass {String name}

然后(工作):

C:\groovytest>\groovy2.6.0\bin\groovy .\ExperimentClassTest.groovy
.
Time: 0.041

OK (1 test)

但鉴于此(由SoapUI运行的Groovy脚本的内容):

evaluate (new File ('C:/groovytest/ExperimentClassTest.groovy'))

然后(没有工作):

groovy.lang.MissingMethodException: No signature of method: ExperimentClassTest.main()

也尝试过:

new ExperimentClassTest().run()

...它确实返回了一个junit.framework.TestResult,但是测试还没有实际运行......

new ExperimentClassTest().run().failures().collect {it}

返回

"TestCase.fName cannot be null"

1 个答案:

答案 0 :(得分:0)

这应该有效:

new GroovyShell().run( new File('./ExperimentClassTest.groovy'), [] )

实际上当您将其作为groovy .\ExperimentClassTest.groovy

运行时

调用GroovyShell,并按类检测如何运行它

https://github.com/groovy/groovy-core/blob/master/src/main/groovy/lang/GroovyShell.java#L295

最后,GroovyShell使用大约此代码来运行测试用例类:

def scriptClass = this.getClass().getClassLoader().parseClass( new File('./ExperimentClassTest.groovy') )
def suite = new junit.framework.TestSuite(scriptClass)
def result = junit.textui.TestRunner.run(suite)