如何调试服务器端的Play 2单元测试

时间:2012-06-02 01:11:06

标签: playframework-2.0

我有这样的单元测试:

    @Test
    public void callRegisterByForm() {
//  AnyContentAsJson anyContentAsJson = null;
    running(fakeApplication(), new Runnable() {
            @Override
            public void run() {
                Map<String, String> map = new HashMap<String, String>();
                map.put("phoneNumber", "+5103978860");
                map.put("countryCode", "us");

                Result result = routeAndCall(fakeRequest("POST", "/register").withFormUrlEncodedBody(map));
                assertThat(status(result)).isEqualTo(OK);
                assertThat(contentType(result)).isEqualTo("application/json");
                JsonNode jsonResult = Json.parse(contentAsString(result));
                assertThat(jsonResult.get(Config.DEV_REG_STATUS_PARAM).asText()).isEqualTo("OK");
                assertThat(jsonResult.get(Config.DEV_PHONE_NUMBER_PARAM).asText()).isEqualTo("+5103978860");
            }
        });

    }

如何测试服务器的控制器?我尝试设置一个远程Java应用程序并在控制台上使用“play debug run”但仍然无法右键单击此测试用例以运行并且让服务器的控制器在断点处停止

这是我右键单击测试用例时的图像。它要求我选择要使用的启动器。 enter image description here

1 个答案:

答案 0 :(得分:1)

MMMh因为我正在使用TypeSafe堆栈,所以我无法访问play可执行文件。

但是,我知道在调试模式下启动播放服务器的方法。 实际上我是在我的博客here上写的。

`export SBT_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999` 

将使JVM(运行Play服务器)监听一个调试连接。

在您说完之后,您设置了一个连接到localhost:9999

的远程应用程序

在播放控制台中,您可以选择

  • 启动test并进行调试(如果您对控制器进行了单元测试)
  • 手动测试你的应用程序(否则)

修改

与在eclipse中运行测试相关,我看不懂怎么做,因为它依赖于类路径和可能的配置。

然而,可以做的是执行play debug test-only test.accounts.MyTest,假设您在包MyTest下的测试类路径中有一个名为test.accounts的测试。这只会执行MyTests的测试。

开始时,将调试器(远程应用程序)附加到jvm,以便遍历代码。

另一种方式可能是: * play debug在一个控制台中, *附加调试器 *打开另一个控制台,根据需要多次执行test-only test.accounts.MyTest