Failing to rung GWTTestCase tests with ant

442 Views Asked by At

I simply cannot succeed in running GWTTestCase tests. I'm using GWT 2.6.1, JUnit 4.11, ant 1.8.2. I've created sample repository on github.

Ant target than runs the tests (maybe it's somtehing obvious in here):

<target name="test.gwt" depends="javac.test"
    description="Run GWTTestCase tests." >
    <junit haltonfailure="false" includeantruntime="false">
        <sysproperty key="gwt.args" value="-prod -runStyle
            HtmlUnit" />
        <sysproperty key="gwt.persistentunitcachedir"
            value="${gwt.cache.dir}" />

        <classpath>
            <pathelement location="${src.dir}" />
            <pathelement location="${test.build.dir}" />
            <path refid="project.class.path" />
        </classpath>
        <formatter type="brief" usefile="false" />

        <test name="com.example.client.TestPerson" />
    </junit>
</target>

I run tests with ant test.gwt, the output I get is:

test.gwt:
    [junit] Testsuite: com.example.client.TestPerson
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.848 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] Loading inherited module 'com.example.Main'
    [junit]    [ERROR] Unexpected error while processing XML
    [junit] java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
    [junit]     at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    [junit]     at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    [junit]     at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
    [junit]     at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
    [junit]     at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
    [junit]     at com.google.gwt.dev.util.xml.ReflectiveParser.createNewSaxParser(ReflectiveParser.java:65)
    [junit]     at com.google.gwt.dev.util.xml.ReflectiveParser.access$000(ReflectiveParser.java:46)
    [junit]     at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.parse(ReflectiveParser.java:343)
    [junit]     at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.access$200(ReflectiveParser.java:68)
    [junit]     at com.google.gwt.dev.util.xml.ReflectiveParser.parse(ReflectiveParser.java:418)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:333)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader$1.load(ModuleDefLoader.java:100)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:197)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:176)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.createSyntheticModule(ModuleDefLoader.java:105)
    [junit]     at com.google.gwt.junit.CompileStrategy.maybeCompileModuleImpl2(CompileStrategy.java:165)
    [junit]     at com.google.gwt.junit.CompileStrategy.maybeCompileModuleImpl(CompileStrategy.java:112)
    [junit]     at com.google.gwt.junit.SimpleCompileStrategy.maybeCompileModule(SimpleCompileStrategy.java:36)
    [junit]     at com.google.gwt.junit.JUnitShell.runTestImpl(JUnitShell.java:1342)
    [junit]     at com.google.gwt.junit.JUnitShell.runTestImpl(JUnitShell.java:1311)
    [junit]     at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:705)
    [junit]     at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:421)
    [junit]     at junit.framework.TestCase.runBare(TestCase.java:130)
    [junit]     at junit.framework.TestResult$1.protect(TestResult.java:106)
    [junit]     at junit.framework.TestResult.runProtected(TestResult.java:124)
    [junit]     at junit.framework.TestResult.run(TestResult.java:109)
    [junit]     at junit.framework.TestCase.run(TestCase.java:120)
    [junit]     at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:247)
    [junit]     at junit.framework.TestSuite.runTest(TestSuite.java:230)
    [junit]     at junit.framework.TestSuite.run(TestSuite.java:225)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeInVM(JUnitTask.java:1420)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:848)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1899)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:800)
    [junit]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    [junit]     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    [junit]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [junit]     at java.lang.reflect.Method.invoke(Method.java:616)
    [junit]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    [junit]     at org.apache.tools.ant.Task.perform(Task.java:348)
    [junit]     at org.apache.tools.ant.Target.execute(Target.java:390)
    [junit]     at org.apache.tools.ant.Target.performTasks(Target.java:411)
    [junit]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    [junit]     at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    [junit]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    [junit]     at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    [junit]     at org.apache.tools.ant.Main.runBuild(Main.java:809)
    [junit]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
    [junit]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    [junit]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
    [junit] ------------- ---------------- ---------------
    [junit] Testcase: testCreate(com.example.client.TestPerson):    Caused an ERROR
    [junit] (see previous log entries)
    [junit] com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:336)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader$1.load(ModuleDefLoader.java:100)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:197)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:176)
    [junit]     at com.google.gwt.dev.cfg.ModuleDefLoader.createSyntheticModule(ModuleDefLoader.java:105)
    [junit]     at com.google.gwt.junit.CompileStrategy.maybeCompileModuleImpl2(CompileStrategy.java:165)
    [junit]     at com.google.gwt.junit.CompileStrategy.maybeCompileModuleImpl(CompileStrategy.java:112)
    [junit]     at com.google.gwt.junit.SimpleCompileStrategy.maybeCompileModule(SimpleCompileStrategy.java:36)
    [junit]     at com.google.gwt.junit.JUnitShell.runTestImpl(JUnitShell.java:1342)
    [junit]     at com.google.gwt.junit.JUnitShell.runTestImpl(JUnitShell.java:1311)
    [junit]     at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:705)
    [junit]     at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:421)
    [junit]     at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:247)
    [junit]
    [junit]
    [junit] Test com.example.client.TestPerson FAILED

BUILD SUCCESSFUL
Total time: 1 second

Any ideas what I might be doing wrong? I've also tried JUnit 3.8 - did not help. Maybe missing .*jar files or not correct versions?

1

There are 1 best solutions below

0
On

Ok, I managed to run the GWTTestCase tests with Ant. The sample project is on github.

First of all I switched to junit task fork mode. Which, as documentation says,

In general, forking a new VM is recommended since it isolates your test from Ant's environment (which contains a lot of libraries on the classloader, in particular XML related classes) but it becomes really slow because of the big overhead associated with starting new Java VMs.

Then I managed to get more verbose errors than this [ERROR] Unexpected error while processing XML when I added validation-api package (ivy.xml):

<dependency org="javax.validation" name="validation-api" rev="1.0.0.GA" />

Then it was clear that I was missing GWT module for my tests. So I created one (./test/com/example/MainTests.xml.gwt):

<module rename-to="MainTests" >
    <inherits name="com.example.Main" />
    <source path="client" />
</module>

And eventually I had to add tests module path to tests classpath (build.xml):

<property name="test.src.dir" value="test" />
...
<junit haltonfailure="false" includeantruntime="false"
    fork="true" forkmode="once" >

    <classpath>
        ...
        <pathelement location="${test.src.dir}" />
        ...
    </classpath>
</junit>