2010-11-03 67 views
1

我正在研究一個依賴於日期時間的應用程序(一個web應用程序,asp.net和c#),因此,根據當前日期,它將啓動窗體爲登錄用戶填寫。如何調試時間依賴的應用程序? (使用當前日期時間變量而不是DateTime.Now)

我一直在考慮如何模擬應用程序的實際使用情況,以用於調試和測試目的。

所以,我說的是更換所有這些:

DateTime currentDate = DateTime.Now; 

的東西,如:

DateTime currentDate = MyDateClass.GetCurrentDate(); 

然後,我將有一個類:

public class MyDateClass 
{ 
    private DateTime _currentDate; 

    public DateTime GetCurrentDate() 
    { 
     // get the date, which may be different from DateTime.Now 
     return _currentDate; 
    } 

    public void SetCurrentDate(DateTime newCurrentDate) 
    { 
     // set the date to the value chosen by the user 
     _currentDate = newCurrentDate; 
    } 
} 

讓我通過調用SetCurrentDate方法來設置當前數據,例如,在鏈接按鈕和日曆inp的代碼後面UT。

問題是......我應該如何在所有應用程序中準確存儲DateTime變量?我不能在這堂課上學習,對吧?我應該使用線程嗎?

那麼,想法讚賞:)在此先感謝您的建議!


對我的問題的一些更新:

我碰到了這個帖子:What's a good way to overwrite DateTime.Now during testing?

就像你與你的答案提供在這裏(謝謝!),良好的代碼組織偉大的祕訣,對於無論是開發還是測試目的,我都會在考慮的時候考慮。

雖然我仍然有同樣的問題:我將如何「保留」日期時間值?

現在,我在數據庫中創建一個單元格表以保持「我的」日期時間值。

我有一個GetCurrentDate和SetCurrentDate功能的靜態類:

public static class DateManagement 
{ 
    public static DateTime GetCurrentDate() 
    { 
     // return DateTime.Now; 
     // OR: 
     // ... 
     // SqlCommand cmd = new SqlCommand("select Date from CurrentDate", conn); 
     // ... 
    } 

    public static void SetCurrentDate(DateTime newDate) // used only in debugging 
    { 
     // ... 
     // string insertStr = @"update CurrentDate set Date = '" + date + "'"; 
     // SqlCommand cmd = new SqlCommand(insertStr, conn); 
     // ... 
    } 
} 

然而,在數據庫中存儲的日期,以創造和公正的調試使用的表格,似乎並不像一個優雅解決方案...

+1

然後,如果你正在談論我假設的會話,那麼你正在創建一個Web應用程序? – Neil 2010-11-03 10:49:34

+1

您可以先開始製作MyDateClass靜態。 – 2010-11-03 10:50:53

+0

是的,這是一個web應用程序(asp.net和c#,vs2008開發)。 – naruu 2010-11-03 11:04:25

回答

3

創建一個接口:

public interface ITimeProvider 
{ 
    DateTime Now { get; } 
} 

然後您可以創建兩個子類 - 一個用於生產使用剛剛使用返回當前時間DateTime.Now,另一個可以手動設置測試時間的地方。使用dependency injection來提供適當的實施。

+0

嗯,這將是一個很好的方式來組織代碼(不知道那些模式,看起來類似於工廠) 。然而,我的問題(也許我只是沒有得到它......)是我將如何維護,保存,一個和唯一的日期時間變量? – naruu 2010-11-03 11:09:11

1

您可以使用Rhino Mocks(或類似的)來欺騙單元測試中的當前日期時間,而不是爲了測試目的而編寫代碼?

+0

然而,這看起來很有趣,因爲我現在只想控制「currentDateTime」,我寧願不使用這個工具,但是現在想知道這些(不知道這些工具),所以我會保留他們考慮未來的發展和測試。 – naruu 2010-11-03 11:14:04

相關問題