Есть ли способ проверить, что часовой пояс по умолчанию никогда не используется в тесте JUnit с использованием EasyMock / PowerMock? - PullRequest
0 голосов
/ 04 августа 2020

Я хотел бы доказать, что на часть написанного мной кода не влияет часовой пояс по умолчанию (установленный либо как свойство JVM, либо через метод setDefault ()) как часть модульного теста.

Есть ли способ выполнить sh это?

Причина, по которой это не так просто, как установка часового пояса по умолчанию в тесте перед вызовом метода, заключается в том, что я пытаюсь проверить безопасность в условиях гонки. Например, рассмотрим следующее:

Calendar calendar = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();

assertEquals(calendar.get(Calendar.DATE), calendar2.get(Calendar.DATE));

Этот тест должен пройти, но что произойдет, если часовой пояс по умолчанию внезапно изменится между двумя вызовами getInstance(), с GMT на Сингапур, потому что где-то выполняется другой фрагмент кода меняет часовой пояс по умолчанию? Тогда у нас есть ситуация, когда это может произойти. где бы это ни было.

1 Ответ

0 голосов
/ 06 августа 2020

В этом случае я бы спровоцировал состояние гонки. Вы добавляете искусственный метод в свой код и используете частичный макет или ручной макет для изменения часового пояса. , вы можете использовать PowerMock для имитации setDefault и сбоя при его вызове. Однако я не уверен, что PowerMock может имитировать классы java. *. Вам может понадобиться агент ByteBuddy.

Осталась одна ошибка. Языковой стандарт по умолчанию можно установить с помощью системных свойств. Однако, если свойство изменяется между двумя getInstance(), это не имеет значения.

...