14

我真的不明白!

我运行包含 cod 的单元测试:

  String progDir = "prog.dir";
  System.clearProperty(progDir);
  System.out.println(System.getProperty(progDir));

在控制台上我看到 prog dir 路径。虽然必须有空。

我在 setUp 块中设置了这个变量。这是junit测试。此变量需要所有其他测试,但不需要,因此我尝试在此测试方法开始时清理它。如果我从 setUp 块中删除此 var 的设置,则此测试将通过。

System.setProperty 工作正常。

怎么可能?谢谢

4

1 回答 1

7

如果一个属性没有在Properties对象中定义,那么将在父对象getProperty中查找Properties

Propertiesjavadoc说:

public String getProperty(String key)

在此属性列表中搜索具有指定键的属性。如果在该属性列表中未找到该键,则递归地检查默认属性列表及其默认值。null如果未找到该属性,则该方法返回。

clearProperty调用Hashtable.removesinceremove不会被覆盖,Properties因此不会影响默认属性列表。

因此,清除的属性很可能仍然可见,getProperty因为Systemjavadoc 没有指定系统Properties是分层的还是平面的。

于 2013-04-25T15:47:25.863 回答