2013-04-25 7 views
13

Ich verstehe wirklich nicht!System löschen Die Eigenschaft funktioniert nicht. Wie kann es sein?

Ich betreibe Unit-Tests, welche enthält cod:

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

Und auf der Konsole Ich sehe prog Verzeichnispfad. Obwohl es null sein muss.

Ich setze diese Variable im Setup-Block. Dies ist ein Junit-Test. Diese Variable braucht für alle anderen Tests aber nicht dafür, also habe ich versucht, sie am Anfang dieser Testmethode zu reinigen. Wenn ich die Einstellung dieser Variablen aus dem Setup-Block entferne, wird dieser Test bestanden.

System.setProperty funktioniert gut.

Wie kann es sein? Thanx

+1

Sind Sie absolut sicher, dass Sie den gleichen Schlüssel löschen wie den, den Sie abrufen? (Es sieht so aus, als könnte es in Ihrem Beispiel einen Tippfehler zwischen 'progDir' und' osprovDir' geben). Andernfalls könnte es sich sehen lassen, was der Rückgabewert des Aufrufs 'clearProperty()' ist - dies sollte der zuvor zugeordnete Wert sein (falls vorhanden). –

+1

Gibt es andere Threads, die diese Eigenschaft möglicherweise festlegen? –

+0

Ich habe gerade Ihren Code laufen lassen und habe ihn "null" ausgedruckt. – supersam654

Antwort

5

Wenn eine Eigenschaft nicht in einem Properties Objekt definiert ist, dann wird getPropertyProperties Objekt im übergeordneten aufblicken

Properties javadoc sagt:

public String getProperty(String key) 

Sucht nach der Eigenschaft mit dem angegebenen Geben Sie diese Eigenschaftenliste ein. Wenn der Schlüssel nicht in dieser Eigenschaftsliste gefunden wird, werden die Standardeigenschaftenliste und ihre Standardwerte rekursiv überprüft. Die Methode gibt null zurück, wenn die Eigenschaft nicht gefunden wird.

clearProperty nennt Hashtable.remove seit remove nicht in Properties außer Kraft gesetzt, um nicht die Standard-Eigenschaftsliste nicht beeinträchtigt.

So ist es durchaus möglich, dass eine Eigenschaft gelöscht noch sichtbar sein, um über getProperty da die System javadoc ist nicht festgelegt, ob das System Properties geschichtet ist oder flach.

+0

Mike Samuel, du hast Recht. Vielen Dank. Ich habe herausgefunden, dass in einigen Legacy-Codes der Eigenschaftskonstruktor verwendet wird, der init voreingestellt ist. –

Verwandte Themen