groovy、Junit4单元测试和相关的测试运行程序

groovy、Junit4单元测试和相关的测试运行程序,groovy,junit4,test-runner,Groovy,Junit4,Test Runner,我正在尝试为我的Groovy代码编写Junit4测试用例。JUnit4测试用例在我的EclipseIDE(SpringSource工具套件)中运行良好。但是,我无法运行一个测试来运行所有的测试用例 这是我目前在测试跑步者方面的尝试。它几乎直接取自Groovy网站本身: import groovy.util.GroovyTestSuite; import org.codehaus.groovy.runtime.ScriptTestAdapter import junit.framework.*;

我正在尝试为我的Groovy代码编写Junit4测试用例。JUnit4测试用例在我的EclipseIDE(SpringSource工具套件)中运行良好。但是,我无法运行一个测试来运行所有的测试用例

这是我目前在测试跑步者方面的尝试。它几乎直接取自Groovy网站本身:

import groovy.util.GroovyTestSuite;
import org.codehaus.groovy.runtime.ScriptTestAdapter
import junit.framework.*;

class allTests {

static Test suite() {
  def gsuite = new GroovyTestSuite()
  gsuite.addTest(new ScriptTestAdapter(gsuite.compile("test/GSieveTest.groovy"), [] as String[]))
  return gsuite
}

}

junit.textui.TestRunner.run(allTests.suite())
结果:

org.codehaus.groovy.runtime.InvokerInvocationException:
    org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack:
    No signature of method: GSieveTest.main() is applicable for argument types: () values: []
怎么了?哦,这是最棒的。我使用“作为Junit测试运行…”运行良好

现在我明白了--Groovy没有用于JUnit4测试的测试运行程序。以下是JUnit4的支持范围:

脚本测试适配器(ScriptTestAdapter)允许您运行不是JUnit测试的groovy脚本。下面是一个例子:

-----ScriptTest1.groovy--------
import static org.junit.Assert.assertEquals;
def sieve = (0..10).toList()
GSieve.filter(sieve); // [1,2,3,5,7]
assertEquals("Count of primes in 1..10 not correct", 5, (sieve.findAll {it -> it != 0}).size());
-----end of ScriptTest1--------

我也为此奋斗了很久,无法让Groovy文档化的示例与JUnit4一起使用。这是我的解决方案,最终非常简单:

创建名为RunAllTestScripts.groovy的脚本:

package com.mypackage

import org.junit.runner.JUnitCore

result = JUnitCore.runClasses MyGroovyTestClass, MyOtherGroovyTestClass, AnotherGroovyTestClass

String message = "Ran: " + result.getRunCount() + ", Ignored: " + result.getIgnoreCount() + ", Failed: " + result.getFailureCount()
if (result.wasSuccessful()) {
    println "SUCCESS! " + message
} else {
    println "FAILURE! " + message
    result.getFailures().each {
        println it.toString() 
    }
}

就这样。JUnitCore(JUnit4)运行程序将运行这些测试类。可能会有一个更优雅的解决方案,其中包含TestSuites,但这足以满足我的需要。Result对象包含ran、ignored、failed计数以及易于查询的详细故障列表。

测试代码在哪里,因为这就是失败的原因?以下是Junit4测试代码。当“作为Junit测试运行…”时工作正常。GSieveTest不应该扩展TestCase吗?所有测试都应该扩展GroovyTestSuite吗?我正在尝试在Junit4中执行所有操作,并尽可能避免使用Junit3。我有一个完整的Junit3解决方案,我寻求一个纯Junit4解决方案。
package com.mypackage

import org.junit.runner.JUnitCore

result = JUnitCore.runClasses MyGroovyTestClass, MyOtherGroovyTestClass, AnotherGroovyTestClass

String message = "Ran: " + result.getRunCount() + ", Ignored: " + result.getIgnoreCount() + ", Failed: " + result.getFailureCount()
if (result.wasSuccessful()) {
    println "SUCCESS! " + message
} else {
    println "FAILURE! " + message
    result.getFailures().each {
        println it.toString() 
    }
}