我需要在单元测试中使用一些环境变量。考虑以下测试类
public class MyTest
{
private String myVar=null;
@Before
public void setUp()
{
myVar = System.getEnv("myEnv");
}
@After
public void tearDown() {}
@Test
public void myTestMethod()
{
assertNotNull(myVar);
}
}
现在在MyTest
类的eclispe调试/运行设置中,我将环境变量定义为
myEnv=myVal
当我将MyTest
课作为jUnit
测试时,myTestMethod
通过。
但是,当我尝试将myTestMethod
作为jUnit
测试时,它会给我一个NullPointerException
。
使其成功的唯一方法是专门为myTestMethod
创建新运行/调试配置,并在新配置中再次创建环境变量。
这非常令人沮丧,因为我可以拥有数十个环境变量和测试。
有没有办法在eclipse中解决这个问题?我没有使用过intelliJ,但这也遇到了同样的问题吗?或者它更像是一个jUnit问题?
答案 0 :(得分:0)
运行单个测试方法时不会重用现有的启动配置:请参阅Eclipse bug 213316,JUnit视图除外。也许有插件可以实现您想要的行为。或者,您可以根据Eclipse source code。
实现您自己想要的行为没有解决方案,只有缩短:按 Ctrl 并单击运行按钮或运行配置菜单项以打开上一次启动或相应的启动配置。
您也可以考虑更改代码以解决at runtime unchangeable environment variables:
的问题Env.getenv(...)
代替System.getenv(...)
:public class Env {
private static Function connector = System::getenv;
public static void setConnector(Function newConnector) {
connector = newConnector;
}
public static String getenv(String name) {
return connector.apply(name);
}
}
Env.getenv(...)
:@Before
public void setUp() {
Map env = new HashMap<>();
env.put("myEnv", "42");
Env.setConnector(env::get);
//...
}