2014-08-29 29 views
0

當我運行這段代碼:單元測試.NET日期時間到SQL datetime值

 
var data = "test"; 
var timestamp = DateTime.Now; 
var id = repo.InsertNewRecord(data, timestamp); 
var record = repo.GetRecord(id); 

Assert.AreEqual(data, record.Data); 
Assert.AreEqual(timestamp, record.TimeStamp); 

...它失敗的第二個斷言。

期望的時間戳有一個滴答計數635449135145624472,但我從數據庫收到的值有一個滴答計數635449135140000000.這是可以理解的,因爲.NET DateTime值的準確性爲100ns,而SQL Server DateTime只有精確度爲3.33ms。我並不需要成爲比這更準確的時間戳,但是有沒有一種測試輸入和輸出相等的標準方法?

從數據庫獲取時間戳是做到這一點的一種方法:

 
var timestamp = Session.CreateSQLQuery("SELECT GetDate()").UniqueResult<DateTime>(); 

回答

2

在滴答聲級不測試,你可以使用一個特定的格式例如,測試的日期

var dateFmt = "dd-MM-yyyy hh:mm:ss"; 
Assert.AreEqual(timestamp.ToString(dateFmt), record.TimeStamp.ToString(dateFmt)); 

或者,你可以這樣做,但只是添加一些空間差異

Assert.True((timeStamp - record.TimeStamp).TotalMilliseconds < 1000);