谷歌应用引擎 +本地 JUnit 测试 +泽西岛框架 +嵌入式码头
我使用 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 测试中运行?” - 我不被允许直接在此处发布链接:-|)
I use Google Appengine for Java (GAE/J).
On top, I use the Jersey REST-framework.
Now i want to run local JUnit tests. The test
- sets up the local GAE development environment ( http://code.google.com/appengine/docs/java/tools/localunittesting.html ),
- launches an embedded Jetty server,
- and then fires requests to the server via HTTP and checks responses.
Unfortunately, the Jersey/Jetty combo spawns new threads. GAE expects only one thread to run.
In the end, I end up having either no datstore inside the Jersey-resources or multiple, having different datastore.
As a workaround I initialise the GAE local env only once, put it in a static variable and inside the GAE resource I add many checks (This threads has no dev env? Re-use the static one). And these checks should of course only run inside JUnit tests.. (which I asked before: "How can I find out if code is running inside a JUnit test or not?" - I'm not allowed to post the link directly here :-|)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许使用系统属性...
当它是 Junit 运行时,通过 JVM 参数设置 Java 系统属性,然后您可以测试如下内容:
-DRunningTestsOnly= true
if ("true".equals(System.getProperty("RunningTestsOnly")))
我之前在 JUnit 测试中做过类似的事情,使用假设忽略测试我认为在我的动力不足的开发 PC 上运行需要太长时间...
-DexecuteQuickRunningTestsOnly=true
assumeThat(System.getProperty("executeQuickRunningTestsOnly", "false"), is("false"));
Maybe use a System property...
When it's a Junit run set a Java system property via a JVM arg which you can then test for something like this:
-DRunningTestsOnly=true
if ("true".equals(System.getProperty("RunningTestsOnly")))
I've done similar to this in JUnit tests before, using assume to ignore tests I think take too long to run on my underpowered dev PC...
-DexecuteQuickRunningTestsOnly=true
assumeThat(System.getProperty("executeQuickRunningTestsOnly", "false"), is("false"));
只是一个想法:
您可以创建一个异常,然后迭代异常的堆栈跟踪以查看其中是否是 junit 包中的类。
Just an idea:
You could create an Exception and then iterate over the exception's stack trace to see if thers's a class from the junit package in there.