Обработка локальных и удаленных различий часовых поясов базы данных в тестах - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть модульный тест в Java, который записывает постоянную метку времени в строку в моей локальной тестовой базе данных, считывает ее обратно и сравнивает с тем, что я ожидал. Это хорошо работает на моем локальном ноутбуке, который находится под часовым поясом GMT.

Когда я фиксирую код на нашем сервере непрерывной интеграции, тест завершается неудачей с разницей во времени - 5 часов. Это неудивительно, поскольку наш сервер интеграции размещен на AWS на восточном побережье США. Тем не менее, это вызывает проблему ...

Если не считать того, что мой локальный сервер MySQL имеет тот же часовой пояс, что и удаленный сервер (и так делают все разработчики в моей команде), может кто-нибудь показать мне, как исправить эту проблему в коде, не становясь слишком взломанным? 1005 *

//Fetch actual table contents
IDataSet databaseDataSet = databaseTester.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("batch");

// Load expected data from an XML dataset
IDataSet expectedDataSet = new XmlDataSet(getClass().getResourceAsStream("/dbunit/expected_insert_batch.xml"));
ITable expectedTable = expectedDataSet.getTable("batch");

// Assert actual database table match expected table
Assertion.assertEquals(expectedTable, actualTable);

Спасибо

Ответы [ 5 ]

4 голосов
/ 14 декабря 2010

Вы можете установить часовой пояс для сервера MySQL отдельно от часового пояса ОС или даже для отдельных сеансов БД. Первый вариант предпочтителен для IMO, так как использует UTC везде, кроме пользовательского интерфейса и импорта данных.

1 голос
/ 14 декабря 2010

ОК, возможно, это не лучший вариант, но почему бы не создать еще один

"/dbunit/expected_insert_batch.xml" 

для вашего CI-сервера. Затем добавьте переключатель в свой юнит-тест для часового пояса.

0 голосов
/ 14 декабря 2010

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

0 голосов
/ 14 декабря 2010

Если вы создаете метку времени в Java, я рекомендую использовать макет, чтобы он вообще не зависел от системы.

См. Ответы на этот вопрос для идей,

0 голосов
/ 14 декабря 2010

Я предлагаю вам сделать так, чтобы все ваши системы использовали один и тот же часовой пояс, например UTC / GMT + 0 и использовать часовой пояс только при отображении для пользователя или в отчетах.

...