Unit testing a view

94 views
Skip to first unread message

Mike

unread,
Aug 24, 2015, 8:56:49 AM8/24/15
to GWTP

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

 

Olivier Lafleur

unread,
Aug 27, 2015, 8:09:37 PM8/27/15
to GWTP
In our best practices, we try to have our views as dumb as possible, so we pretty much don't test them.

We try to test our presenters, which contains the logic of our client-side applications.
To go in this way, please check our Unit Test Cookbook, which can help you do that :
...
Reply all
Reply to author
Forward
0 new messages