我使用 Google Appengine for Java (GAE/J)。 最重要的是,我使用 Jersey REST 框架。
现在我想运行本地 JUnit 测试。测试
- 设置本地 GAE 开发环境 ( http://code.google.com/appengine/docs/java/tools/localunittesting.html ),
- 启动嵌入式 Jetty 服务器,
- 然后通过 HTTP 向服务器发出请求并检查响应。
不幸的是,Jersey/Jetty 组合产生了新线程。 GAE 期望只有一个线程运行。 最后,我最终要么在 Jersey 资源中没有数据存储,要么在多个数据存储中拥有不同的数据存储。
作为一种解决方法,我只初始化了一次 GAE 本地环境,将其放入静态变量中,并在 GAE 资源中添加了许多检查(该线程没有开发环境?重新使用静态环境)。 这些 检查当然应该只在 JUnit 测试中运行。直接在此处发布链接:-|)
最佳答案
也许使用系统属性... 当它是 Junit 运行时,通过 JVM arg 设置 Java 系统属性,然后您可以测试这样的东西:
- 在测试时(可能在 IDE 等中)通过运行配置参数传递 JVM arg,如下所示:
-DRunningTestsOnly=true
- 在代码中:
if ("true".equals(System.getProperty("RunningTestsOnly")))
我之前在 JUnit 测试中做过类似的事情,使用 assume 来忽略我认为在我的低功率开发 PC 上运行时间太长的测试...
- 传入 JVM arg:
-DexecuteQuickRunningTestsOnly=true
- 要忽略运行缓慢的测试方法,如果我将属性集放在方法的顶部:
assumeThat(System.getProperty("executeQuickRunningTestsOnly", "false"), is("false"));
关于java - Google AppEngine + 本地 JUnit 测试 + Jersey 框架 + 嵌入式 Jetty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351293/