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.

  1. your unit tests in plugin fragment. unit test fragment has dependency on junit.
  2. your pom should turn off use of system class loader unit tests. causes junit test classes lost.
  3. 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

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -