我有两个用JUnit实现的集成测试。这两个测试都执行对远程服务器的调用,并且服务器目标由环境变量配置:
System.setProperty("property", "value1");棘手的是,对于两个测试,这些属性必须是不同的。如果我为每个单元测试设置环境变量,它将不起作用,因为我们正在使用的中间件在第一次调用时缓存属性值,并且不再计算它(对于第二次测试)。
我认为解决方案可能是在单独的进程中运行这些单元测试。我看到过类似的讨论here,但也许有更优雅的方式来用JUnit4做到这一点呢?这个问题看起来很常见。或者,也许还有其他方法可以用不同的配置运行单元测试?
提前感谢您的建议。
发布于 2012-09-03 18:14:26
在测试之间不能重置状态被认为是不好的做法。虽然不容易测试的代码很常见,但解决方案并不简单。
我会考虑重置缓存值,即使你使用反射来做。需要重置的确切内容取决于库的内部表示。
发布于 2012-09-03 18:20:17
这取决于你是如何运行JUnit的。
如果您希望能够在集成开发环境或构建环境中运行它,请实现您的自定义Runner,并使用注释RunWith(MyRunner.class)标记测试用例。
如果您正在使用maven,并且能够从那里运行测试就足够了,那么可以在maven-surefire-plugin定义中使用<forkMode>always</forkMode>。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<systemProperties>
<systemProperty>
<name>panpwr.conf.dir</name>
<value>${basedir}/conf-test</value>
</systemProperty>
</systemProperties>
<forkMode>always</forkMode>发布于 2015-05-18 00:24:50
我需要在使用一些遗留代码时隔离junit测试,所以我开发了小的maven插件Jute,它允许在独立的外部进程、I have published it in GitHub和maven central中启动每个Junit测试方法,该插件可能是您问题的合适解决方案,而且该插件还允许使用不同的JVM启动此类测试
https://stackoverflow.com/questions/12245806
复制相似问题