目標
私は本当に奇妙な問題を抱えています。私の目標は、dbunit を使用してデータベース内の動的な日付を比較することです (データベースは Oracle のデータベースです)。この動的な日付は今日の日付です(静的な日付の比較は機能します...)
実験
日付を比較するには、次の非常に単純なコードを使用します。
@Test
public void simpleDateTest() throws DatabaseUnitException, SQLException {
// create a date corresponding to today
Date today = new Date();
// load a dataset
IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(getClass()
.getResource("/dataset.xml"));
// replace [TODAY] by the today date
ReplacementDataSet rDataSet = new ReplacementDataSet(expectedDataSet);
rDataSet.addReplacementObject("[TODAY]", today);
// insert the dataset
DatabaseConnection connection = getConnection();
DatabaseOperation.CLEAN_INSERT.execute(connection, rDataSet);
// do a simple query to get some fields, em is the entity manager which uses the same connection as above
Query q = em
.createNativeQuery("SELECT ID, MY_DATE FROM MY_TABLE");
List<Object[]> result = q.getResultList();
// compare the date with today date
assertEquals(today.getTime(), ((Date) result.get(0)[1]).getTime());
}
次のデータセットを使用:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<MY_TABLE ID="1" MY_DATE="[TODAY]" />
</dataset>
問題
理由はわかりませんが、アサートに失敗しました! 2 つの日付を比較すると、数ミリ秒の違いがあります。エラーは次のようなものです:
java.lang.AssertionError: expected:<1358262234801> but was:<1358262234000>
通常は同じであるため、どのようにして異なる日付を設定できるのかわかりません。問題とその解決方法を理解する手がかりはありますか?