【问题标题】:How to setup environment variable via Junit? [duplicate]如何通过 Junit 设置环境变量? [复制]
【发布时间】:2014-10-09 22:26:23
【问题描述】:

我正在使用 Junit 测试一个委托类。 当我右键单击运行配置并将键值对放在环境选项卡中时,它工作正常。

我尝试通过静态块和@Before 方法设置它,但没有成功。 你能帮忙吗?

public MyClass{
public void myMethod(){
String tmp = configProps.getProperty("auto_commit_location");
String commitScriptLocation = System.getenv(tmp);
System.out.println(commitScriptLocation); --- This returns null
 }
}

Junit Test:

public class AutoCommitControlDelegateTest {

    static {
        System.setProperty("auto_commit_location", "/tmp/");
    }

    @Autowired
    private *******
    //calls to my methods

【问题讨论】:

  • 你能分享一些代码吗?更容易帮助解决您面前的具体问题...
  • 我要做的是从 Junit 设置一个 env 变量,该变量将在 java 类中使用。我看了看答案。但它不起作用。
  • 何时调用String commitScriptLocation = System.getenv(tmp); 行?它在静态块中吗?构造函数?其他方法?
  • 从非静态方法调用。
  • 你在使用eclipse吗?您可以尝试设置一个 ant 任务来设置环境变量,然后运行您的 junit 代码。 Env 变量是只读的,因此您要么需要在 java 之外设置它们,要么在 Emil H 链接的问题中执行类似操作。

标签: junit environment-variables


【解决方案1】:

嗯嗯,

我改变了这一行:

String commitScriptLocation = System.getenv(tmp);

到这里:

String commitScriptLocation = System.getProperty(tmp);

它有效。 :( 我花了 2 个小时才弄清楚这一点。

【讨论】:

    【解决方案2】:

    要回答您的具体问题,在运行的 JVM 中设置环境变量很复杂(尽管可能:Is it possible to set an environment variable at runtime from Java?)。

    相反,如果您能够使用系统属性 (What's the difference between a System property and environment variable),则考虑使用 System Rules(“为测试提供系统属性的任意值。测试后恢复原始值。 "):

    public void MyTest {
        @Rule
        public final ProvideSystemProperty myPropertyHasMyValue
         = new ProvideSystemProperty("MyProperty", "MyValue");
    
        @Test
        public void overrideProperty() {
            assertEquals("MyValue", System.getProperty("MyProperty"));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 2019-05-30
      • 2013-10-12
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多