Eclipse jUnit:不能在单元测试中使用环境变量

时间:2017-08-08 14:35:12

标签: java eclipse unit-testing intellij-idea junit

我需要在单元测试中使用一些环境变量。考虑以下测试类

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问题?

1 个答案:

答案 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);
        //...
    }
  • 在测试代码集环境变量中