Hello evrybody,
I’m trying to learn how to write a Unit Test for a View. Therefor I followed this article:
http://blog.arcbees.com/2010/11/25/testing-views-using-gwt-platform-mockingbinder/
But when running my unit test I always get this error:
java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge
at ..debug.DebugViewTest$Module.configureTest(DebugViewTest.java:49)
at org.jukito.JukitoModule.configure(JukitoModule.java:113)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.spi.Elements.getElements(Elements.java:78)
at org.jukito.BindingsCollector.collectBindings(BindingsCollector.java:91)
at org.jukito.JukitoRunner.ensureInjector(JukitoRunner.java:113)
at org.jukito.JukitoRunner.computeTestMethods(JukitoRunner.java:243)
at org.jukito.JukitoRunner.validateInstanceMethods(JukitoRunner.java:379)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at org.jukito.JukitoRunner.<init>(JukitoRunner.java:75)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: com.google.gwt.core.client.GWTBridge
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 33 more
This is my View:
package ...debug;
import javax.inject.Inject;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.gwtplatform.mvp.client.ViewWithUiHandlers;
class DebugView extends ViewWithUiHandlers<DebugUiHandlers> implements DebugPresenter.MyView {
@UiField
Label nameLabel;
@Inject
DebugView(Binder uiBinder) {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setName(String name) {
nameLabel.setText(name);
}
interface Binder extends UiBinder<Widget, DebugView> {
}
}
And this is my Unit Test:
package ...debug;
import static org.mockito.Mockito.verify;
import ...debug.DebugView.Binder;
import javax.inject.Inject;
import com.google.gwt.junit.GWTMockUtilities;
import com.google.gwt.user.client.ui.Widget;
import com.gwtplatform.tester.MockFactory;
import com.gwtplatform.tester.MockingBinder;
import org.jukito.JukitoModule;
import org.jukito.JukitoRunner;
import org.junit.AfterClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(JukitoRunner.class)
public class DebugViewTest {
@Inject
DebugView view;
@Test
public void testSetName() {
// given
// when
view.setName("some name");
// then
verify(view.nameLabel).setText("some name");
}
@AfterClass
public static void tearDown() {
GWTMockUtilities.restore(); // Just to be nice to future tests
}
/**
* This is the Guice test module. Jukito runs the configureTest() method
* to setup all the bindings used in the following unit tests.
*/
public static class Module extends JukitoModule {
@Override
protected void configureTest() {
GWTMockUtilities.disarm();
bind(Binder.class).to(MyTestBinder.class);
}
/**
* This is the test binder extending `MockingBinder` and implementing the view's `Binder`.
*/
static class MyTestBinder extends MockingBinder<Widget, DebugView> implements Binder {
public MyTestBinder(final MockFactory anyMockFactory) {
super(Widget.class, anyMockFactory);
}
}
}
}
What am I doing wrong?
Can anybody help me?
Thank you, for your help in advanced.
Best regards,
Mike
...