eclipse - Tycho tests failing due to java.lang.NoClassDefFoundError: junit/framework/AssertionFailedError -
i flummoxed , flabbergasted one. in understanding, should work, don't know why.
i have tycho build runs few tests in eclipse worksbench. however, of tests fail kind of exception:
java.lang.noclassdeffounderror: junit/framework/assertionfailederror @ org.grails.ide.eclipse.commands.test.abstractcommandtest.teardown(abstractcommandtest.java:112) @ junit.framework.testcase.runbare(testcase.java:140) @ junit.framework.testresult$1.protect(testresult.java:110) @ junit.framework.testresult.runprotected(testresult.java:128) @ junit.framework.testresult.run(testresult.java:113) @ junit.framework.testcase.run(testcase.java:124) @ junit.framework.testsuite.runtest(testsuite.java:243) @ junit.framework.testsuite.run(testsuite.java:238) @ junit.framework.testsuite.runtest(testsuite.java:243) @ junit.framework.testsuite.run(testsuite.java:238) @ org.springsource.ide.eclipse.commons.tests.util.managedtestsuite.run(managedtestsuite.java:231) @ org.junit.internal.runners.junit38classrunner.run(junit38classrunner.java:83) @ org.apache.maven.surefire.junit4.junit4testset.execute(junit4testset.java:53) @ org.apache.maven.surefire.junit4.junit4provider.executetestset(junit4provider.java:123) @ org.apache.maven.surefire.junit4.junit4provider.invoke(junit4provider.java:104) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.apache.maven.surefire.util.reflectionutils.invokemethodwitharray(reflectionutils.java:164) @ org.apache.maven.surefire.booter.providerfactory$providerproxy.invoke(providerfactory.java:110) @ org.apache.maven.surefire.booter.surefirestarter.invokeprovider(surefirestarter.java:175) @ org.apache.maven.surefire.booter.surefirestarter.runsuitesinprocess(surefirestarter.java:123) @ org.eclipse.tycho.surefire.osgibooter.osgisurefirebooter.run(osgisurefirebooter.java:84) @ org.eclipse.tycho.surefire.osgibooter.abstractuitestapplication$1.run(abstractuitestapplication.java:35) @ org.eclipse.swt.widgets.runnablelock.run(runnablelock.java:35) @ org.eclipse.swt.widgets.synchronizer.runasyncmessages(synchronizer.java:135) @ org.eclipse.swt.widgets.display.runasyncmessages(display.java:3529) @ org.eclipse.swt.widgets.display.readanddispatch(display.java:3182) @ org.eclipse.e4.ui.internal.workbench.swt.partrenderingengine$9.run(partrenderingengine.java:1022) @ org.eclipse.core.databinding.observable.realm.runwithdefault(realm.java:332) @ org.eclipse.e4.ui.internal.workbench.swt.partrenderingengine.run(partrenderingengine.java:916) @ org.eclipse.e4.ui.internal.workbench.e4workbench.createandrunui(e4workbench.java:86) @ org.eclipse.ui.internal.workbench$5.run(workbench.java:585) @ org.eclipse.core.databinding.observable.realm.runwithdefault(realm.java:332) @ org.eclipse.ui.internal.workbench.createandrunworkbench(workbench.java:540) @ org.eclipse.ui.platformui.createandrunworkbench(platformui.java:149) @ org.eclipse.ui.internal.ide.application.ideapplication.start(ideapplication.java:124) @ org.eclipse.tycho.surefire.osgibooter.uitestapplication.runapplication(uitestapplication.java:31) @ org.eclipse.tycho.surefire.osgibooter.abstractuitestapplication.run(abstractuitestapplication.java:114) @ org.eclipse.tycho.surefire.osgibooter.uitestapplication.start(uitestapplication.java:37) @ org.eclipse.equinox.internal.app.eclipseapphandle.run(eclipseapphandle.java:196) @ org.eclipse.core.runtime.internal.adaptor.eclipseapplauncher.runapplication(eclipseapplauncher.java:110) @ org.eclipse.core.runtime.internal.adaptor.eclipseapplauncher.start(eclipseapplauncher.java:79) @ org.eclipse.core.runtime.adaptor.eclipsestarter.run(eclipsestarter.java:353) @ org.eclipse.core.runtime.adaptor.eclipsestarter.run(eclipsestarter.java:180) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.eclipse.equinox.launcher.main.invokeframework(main.java:629) @ org.eclipse.equinox.launcher.main.basicrun(main.java:584) @ org.eclipse.equinox.launcher.main.run(main.java:1438) @ org.eclipse.equinox.launcher.main.main(main.java:1414) caused by: java.lang.classnotfoundexception: junit.framework.assertionfailederror @ org.eclipse.osgi.internal.loader.bundleloader.findclassinternal(bundleloader.java:501) @ org.eclipse.osgi.internal.loader.bundleloader.findclass(bundleloader.java:421) @ org.eclipse.osgi.internal.loader.bundleloader.findclass(bundleloader.java:412) @ org.eclipse.osgi.internal.baseadaptor.defaultclassloader.loadclass(defaultclassloader.java:107) @ java.lang.classloader.loadclass(classloader.java:247) ... 54 more
this doesn't make sense me. org.junit
, org.junit4
dependencies of bundle running tests bundle contains abstractcommandtest
. these tests pass when run inside workspace, why maven/tycho cannot load junit classes?
i'm happy provide more information link github repo if help.
edit: providing more details
the github repo here: https://github.com/grails/grails-sts-tests
you can see simple, single plugin runs tests. test suite made of tests coming plugins in other repositories specified dependencies. note test plugins located in other repositories run on ci server , not have noclassdeffounderror problem. i've taken @ other ci server , don't notice different (unfortunately, ci server not publicly accessible, can't share link it).
a hudson build job showing problem here: http://hudson.grails.org/job/grails-sts-tests-2.0.x/17/console
we had similar problems. cause junit framework tries create , use custom classloader, , doesn't play eclipse plugin classloaders. there guidelines running unit tests tycho follow now.
- your unit tests in plugin fragment. unit test fragment has dependency on junit.
- your pom should turn off use of system class loader unit tests. causes junit test classes lost.
- then use same packaging standard plugin (eclipse-plugin, exact).
so simple pom (for us) looks this:
<?xml version="1.0" encoding="utf-8"?> <project xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <modelversion>4.0.0</modelversion> <parent> <artifactid>master</artifactid> <groupid>mgws</groupid> <version>0.0.1-snapshot</version> <relativepath>../../mgws/build-environment/pom.xml</relativepath> </parent> <groupid>mgws</groupid> <artifactid>mgws.spectral.test</artifactid> <version>1.0.0-snapshot</version> <packaging>eclipse-plugin</packaging> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <version>2.12</version> <executions> <execution> <id>junittest</id> <goals> <goal>test</goal> </goals> <phase>install</phase> <configuration> <usesystemclassloader>false</usesystemclassloader> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
this makes unit test framework use eclipse plugin classloaders , finds classes.
Comments
Post a Comment