【问题标题】:Unable to debug gwt test for gwt 2.8 and java 1.8 version无法调试 gwt 2.8 和 java 1.8 版本的 gwt 测试
【发布时间】:2017-03-30 11:08:24
【问题描述】:

我已将 gwt 版本升级到 2.8 和 java 1.8。测试在 gwt 2.7 和 java 1.7 上运行良好。我是否需要在 gwt.xml 中添加额外的配置或在 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>

测试代码:

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>

【问题讨论】:

  • 到底是什么问题?测试失败了吗?还是这是设置断点和调试的问题?
  • 如果我在 getModuleName() 方法中放置一个断点,它会被命中,但测试用例中的任何断点都不会被命中。
  • 您将版本放在范围字段中。

标签: java maven gwt junit gwttestcase


【解决方案1】:

从 GWT 2.8 开始,经典的开发模式现在(正式)被弃用,测试默认在 prod 模式下运行(即编译为 JavaScript)。

这意味着您不能在 Java 代码中设置断点并期望在 Java 调试器中到达(因为它们是由标准 JUnit 运行程序驱动的常规 JUnit 3 测试,一些方法实际上会被调用,但不是测试方法本身)。
您可以(暂时)通过在-Dgwt.args= 系统属性as hinted in the release notes 中传递-devMode 来重新启用测试的开发模式。

或者,您可以在“手动”模式下运行测试(您将获得在浏览器中打开的 URL,您可以在其中调试 JavaScript),或者您可以在运行测试时传递 -Dgwt.htmlunit.debug 系统属性使用 HtmlUnit 运行样式(默认)来显示调试器窗口(注意:我不知道如何使用它)。

…或通过记录事物来“调试”“好的旧方法”;和/或制作一个小型复制案例作为您可以在浏览器中运行的 GWT 应用程序。

【讨论】:

  • 您好,我尝试过使用第二种方法,在 Eclipse 调试配置中添加了一个参数为 ${system:-devMode}。它没有工作
  • 它是“JVM 参数”中的-Dgwt.args="-devMode"(请参阅发行说明)(不记得确切的措辞)。但是 Eclipse 调试配置默认将内容放入 gwt.args(-war,-logLevel),并且显式 gwt.args 将覆盖它们。运气好的话,实际上有一个复选框可以打开或关闭开发模式。
  • @ThomasBroyer 你在哪里具体指定这个标志?当我右键单击一个 gwt 测试用例时,我只看到调试为 -> GWT JUnit 测试,它根本不允许任何配置。
【解决方案2】:

要在 GWT 2.8 for eclipse IDE 中启用开发模式以调试测试用例,请按照以下步骤操作,这肯定会对您有所帮助:

  1. 右键单击编写测试用例的项目。
  2. 选择调试作为配置。
  3. 左侧导航选择要调试的测试用例。
  4. 然后选择参数选项卡并添加 -Dgwt.args="-devMode" 参数 在为 VM 参数指定的框中。
  5. here is the screen-shot

【讨论】:

    【解决方案3】:

    这是对 Thomas Broyer 答案的评论。

    要在“手动”模式下运行测试,您必须指定 runSytle 并将样式更改为 PRETTY。

    -Dgwt.args="-runStyle Manual:1 -style PRETTY"

    Eclipse JUnit VM settings example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      相关资源
      最近更新 更多