2010-02-28 74 views
6

我使用Google Appengine for Java(GAE/J)。 最重要的是,我使用Jersey REST框架。Google AppEngine +本地JUnit测试+ Jersey框架+嵌入式Jetty

现在我想运行本地JUnit测试。测试

不幸的是,Jersey/Jetty组合产生了新的线程。 GAE预计只有一个线程可以运行。最后,我最终没有在泽西资源或多个数据存储中拥有不同的数据存储,而是拥有不同的数据存储。

作为一种解决方法,我只将GAE本地env初始化一次,将其放入静态变量中,并在GAE资源内部添加许多检查(此线程没有开发环境?重新使用静态环境)。而这些检查当然应该只在JUnit测试中运行..(我之前问过:“我怎样才能知道代码是否在JUnit测试中运行?” - 我不允许直接发送链接位置: - |)

回答

4

也许使用系统属性... 当它是一个Junit的运行通过JVM ARG设置Java系统属性,你可以再试验的是这样的:

  • 传中一个JVM arg通过运行配置参数当测试(在IDE等可能)如下:-DRunningTestsOnly=true
  • 代码:if ("true".equals(System.getProperty("RunningTestsOnly")))

我在JUnit测试做类似于此之前,使用假设忽略测试中,我觉得时间太长我的动力不足dev的PC上运行...

  • 通在JVM ARG:-DexecuteQuickRunningTestsOnly=true
  • 要忽略一个缓慢的运转测试方法,如果属性设置我把在方法的顶部:assumeThat(System.getProperty("executeQuickRunningTestsOnly", "false"), is("false"));
+0

另外考虑使用环境变量,通过例如'String runLevel = System.getenv(“RUN_LEVEL”);'在代码中进行访问。 *独立于语言的机制很受欢迎,它允许程序在不同的环境(开发,测试,集成,CI,生产等)中拥有不同的配置参数。 – gb96 2017-08-23 05:39:02

1

只是一个想法: 您可以创建一个异常,然后遍历异常过的堆栈跟踪来查看它们是否来自junit包中的一个类。