2013-04-25 6 views
13

私は本当に理解していない!システムクリアプロパティが機能しません。どのようにすることができますか?

私はタラが含まれているユニットテストを実行します。

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

、コンソール上に、私はディレクトリのパスをPROG参照。 nullが必要ですが。

この変数をsetUpブロックに設定します。これはジュニットテストです。この変数は他のすべてのテストでは必要ですが、このテストメソッドの開始時にはそれをクリーンアップしようとしました。 setUpブロックからこのvarの設定を削除すると、このテストは合格になります。

System.setPropertyは正常に動作します。

どのようにすることができますか? ありがとう

+1

取得しているのと同じキーをクリアしていることは間違いありませんか? ( 'progDir'と' osprovDir'の間のあなたの例では、タイプミス/バグがあるようです。)それ以外の場合は、 'clearProperty()'呼び出しの戻り値が何であるかを見る価値があるかもしれません。これは以前にマップされた値(もしあれば)でなければなりません。 –

+1

そのプロパティを設定している他のスレッドがありますか? –

+0

私はちょうどあなたのコードを実行し、 'null'を印刷しました。 – supersam654

答えて

5

プロパティはPropertiesオブジェクトで定義されていない場合は、getProperty

Properties javadocが言う親にPropertiesオブジェクトを検索します:

public String getProperty(String key) 

検索を指定してプロパティのこのプロパティリストのキー。 このプロパティリストにキーが見つからない場合は、デフォルトのプロパティリストとそのデフォルト値が再帰的にチェックされます。プロパティが見つからない場合、メソッドはnullを返します。 remove以来

clearProperty通話Hashtable.removeはので、デフォルトのプロパティリストには影響しませんPropertiesでオーバーライドされていません。

System javadocはシステムPropertiesが階層化されているかフラットであるかを指定していないため、クリアされたプロパティはまだgetPropertyで表示される可能性があります。

+0

マイク・サミュエル、そうです。ありがとうございました。私は、いくつかのレガシーコードでは、initがデフォルトするPropertiesコンストラクタを使用することがわかりました。 –

関連する問題