Search code examples
javamavengwtjunitgwttestcase

Unable to debug gwt test for gwt 2.8 and java 1.8 version


I have upgraded gwt version to 2.8 and java 1.8. Test is running fine with gwt 2.7 and java 1.7. Do I need to add extra configurations in gwt.xml or any dependency in pom

pom :

        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-servlet</artifactId>
            <scope>2.8</scope>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <scope>2.8</scope>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-dev</artifactId>
            <scope>2.8</scope>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava-gwt</artifactId>
            <version>20.0</version>
        </dependency>

Test code :

public class Test extends GWTTestCase {

    Logger logger = Logger.getLogger(this.getClass().getCanonicalName());

    /* (non-Javadoc)
     * @see com.google.gwt.junit.client.GWTTestCase#getModuleName()
     */
    @Override
    public String getModuleName() {
        return "org.field.TestJUnit";
    }

    public void testRenderAndBindTopScene() {
        GWT.log("hi");
        PageEx pageEx = GWT.create(PageEx.class);
    }
}

TestJUnit.gwt.xml :

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to="Field">
    <!-- Inherit our applications main module. -->
    <inherits name='org.field.Field' />


    <source path="client" />
    <source path="shared" />

</module>

Solution

  • Starting with GWT 2.8, the classic dev mode is now (officially) deprecated, and tests run in prod mode by default (i.e. compiled to JavaScript).

    This means you cannot set breakpoints in your Java code and expect to be reached in a Java debugger (because they are regular JUnit 3 tests, driven by the standard JUnit runner, some of the methods will actually be called, but not the test methods themselves).
    You can (temporarily) re-enable dev mode for tests by passing -devMode in the -Dgwt.args= system property, as hinted in the release notes.

    Alternatively, you can run the tests in "manual" mode (you'll be given a URL to open in your browser, where you can debug the JavaScript), or you could pass the -Dgwt.htmlunit.debug system property when running tests with the HtmlUnit run style (the default) to show a debugger window (note: I have no idea how to use it).

    …or "debug" the "good old way" by logging things; and/or making a small repro-case as a GWT app that you can run in your browser.