我使用Google Appengine for Java(GAE / J) . 最重要的是,我使用Jersey REST框架 .
现在我想运行本地JUnit测试 . 考试
-
Build 了当地的GAE开发环境(http://code.google.com/appengine/docs/java/tools/localunittesting.html),
-
启动嵌入式Jetty服务器,
-
然后通过HTTP触发对服务器的请求并检查响应 .
不幸的是,Jersey / Jetty组合产生了新的线程 . GAE期望只运行一个线程 . 最后,我最终在Jersey-resources内部没有数据存储区,也没有多个数据存储区 .
作为一种解决方法,我只将GAE本地环境初始化一次,将其置于静态变量中,并在GAE资源内部添加许多检查(此线程没有开发环境?重新使用静态环境变量) . 这些检查当然只能在JUnit测试中运行..(之前我问过:"How can I find out if code is running inside a JUnit test or not?" - 我不允许直接在这里发布链接: - |)
2 回答
也许使用System属性......当它是Junit运行时,通过JVM arg设置Java系统属性,然后你可以测试这样的东西:
在测试时(在IDE等中)通过运行配置parms传入JVM arg,如下所示:
-DRunningTestsOnly=true
代码:
if ("true".equals(System.getProperty("RunningTestsOnly")))
我之前在JUnit测试中做过类似的事情,使用假设来忽略测试我认为在我的动力不足的开发PC上运行时间过长...
传入JVM arg:
-DexecuteQuickRunningTestsOnly=true
如果属性集I放在方法的顶部,则忽略缓慢运行的测试方法:
assumeThat(System.getProperty("executeQuickRunningTestsOnly", "false"), is("false"));
只是一个想法:您可以创建一个Exception,然后遍历异常的堆栈跟踪,看看那些是来自junit包的类 .