Подтвердить что ты не робот

Свойство System clear не работает. Как это может быть?

Я действительно не понимаю!

Я запускаю модульные тесты, которые содержат cod:

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

И на консоли я вижу прог-путь. Хотя должно быть значение null.

Я устанавливаю эту переменную в блоке setUp. Это тест юнита. Эта переменная нужна для всех других тестов, но не для этого, поэтому я попытался очистить ее в начале этого метода тестирования. Если я удалю настройку этого var из блока setUp, этот тест пройдет.

System.setProperty работает нормально.

Как это может быть? Thanx

4b9b3361

Ответ 1

Если свойство не определено в объекте Properties, тогда getProperty будет искать в родительском объекте Properties

Properties javadoc говорит:

public String getProperty(String key)

Ищет свойство с указанным ключом в этом списке свойств. Если ключ не найден в этом списке свойств, тогда проверяется список свойств по умолчанию и его рекурсивные значения по умолчанию. Метод возвращает null, если свойство не найдено.

clearProperty вызывает Hashtable.remove, поскольку remove не переопределяется в Properties, поэтому не влияет на список свойств по умолчанию.

Таким образом, вполне возможно, что очищенное свойство все еще будет видимым через getProperty, так как System javadoc не указывает, является ли система Properties слоистой или плоской.