Я пытаюсь написать модульный тест, который включает использование устаревшего кода. Проблема заключается в том, что, как я могу сказать, устаревший код использует пару ключ/значение из файла свойств для инициализации одного из его конечных статических частных членов, и я не имею ни малейшего представления о том, где может быть этот файл свойств (весь приложение довольно велико).Смещение зависимости от файла свойства
Итак, в моем тесте, я хочу сделать что-то вроде этого (с помощью Mockito):
LegacyClass legacyClass = mock(LegacyClass.class);
Я в конечном итоге получить ExceptionInInitializationError
, который указывает, что не может найти определенный ключ свойства.
В LegacyClass.java, есть:
private static final int LEGACY_PROPERTY =
Integer.parseInt(LegacyPropertyManager.getProp("legacy.property.key"));
Есть ли способ, чтобы написать тест, который использует этот унаследованный класс, даже если ключевое свойство он ищет не существует? Можно ли это как-то насмехаться?
Добавить свой файл свойств для тестового тестирования, например [здесь] (http://stackoverflow.com/questions/1557562/does-junit-support-properties-files-for-tests) –
@RobGarwood Но проблема в том, что что это унаследованный класс, который использует свойство - как бы заставить LegacyClass использовать свой собственный файл свойств при создании экземпляра вместо того, который был найден LegacyPropertyManager? – dashik
@JeffBowman Умный действительно; хотя я не слишком уверен, как использовать 'mockStatic' для издевки' getProp', чтобы он использовал мой файл свойств. В моем модульном тесте я попытался издеваться над «LegacyPropertyManager», а затем настроил 'when (...). ThenReturn (...)' как в примере, к которому вы привязались, но похоже, что LegacyClass все еще использует оригинал. Был ли еще один шаг, который мне нужно сделать? – dashik