0

ローカル テスト データベースの行に一定の Timestamp を書き込み、それを読み戻して、期待したものと比較する Java の単体テストがあります。これは、GMT タイムゾーンの下にあるローカル ラップトップで正常に動作します。

コードを継続的インテグレーション サーバーにコミットすると、テストは失敗し、時間差は -5 時間です。当社の統合サーバーは米国東海岸の AWS でホストされているため、これは当然のことです。しかし、それは問題を引き起こしています...

私のローカルMySQLサーバーがリモートサーバーと同じタイムゾーンを持つように変更する(そして私のチームのすべての開発者もそうするようにする)以外に、ハックしすぎずにコードでこの問題を修正する方法を誰か教えてもらえますか?

//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);

ありがとう、

4

5 に答える 5

4

OS のタイムゾーンとは別に MySQL サーバーのタイムゾーンを設定することも、個々の DB セッションのタイムゾーンを設定することもできます。前者は、UI を除くすべての場所でUTCを使用し、データをインポートする場合と同様に、IMO が推奨されます。

于 2010-12-14T11:57:57.047 に答える
1

すべてのシステムで UTC/GMT+0 などの同じタイム ゾーンを使用し、ユーザーに表示するときやレポートでのみタイム ゾーンを使用することをお勧めします。

于 2010-12-14T12:00:16.517 に答える
1

OK、これは最善の選択肢ではないかもしれませんが、別の選択肢を作成してみませんか?

"/dbunit/expected_insert_batch.xml" 

CI サーバー用。次に、タイムゾーンの単体テストにスイッチを追加します。

于 2010-12-14T12:46:25.587 に答える
0

Java でタイムスタンプを作成している場合は、システムにまったく依存しないようにモックを使用することをお勧めします。

アイデアについては、この質問への回答を参照してください。

于 2010-12-14T12:03:12.763 に答える
-1

テストを環境に依存しないようにする必要があります。このフィールドを動的にすることができ、どこでも機能する場所を探してください。

于 2010-12-14T14:37:36.843 に答える