2012-04-03 76 views
6

我想爲我的web應用程序編寫一些測試用例,但是在某些情況下卡住了,例如「此令牌應該在30天內過期」。在測試結束之前,沒有人喜歡等待30天。如何編寫用於測試「30天過期」之類的測試用例?

還有對於一些預定的事件發生,如「發送電子郵件的用戶,2周後報名」,「下一個結算日期前2天產生的法案」等

什麼建議其他情況你有寫這樣的測試用例嗎?或者,還有另外一種方法確保這些功能按照設計的精確工作?

回答

4

我寫這些測試的方法是定義以毫秒爲單位的過期時間。這樣,您可以輕鬆編寫測試,因爲您的測試環境可以定義1毫秒的終止時間。生產環境顯然會定義合適的持續時間。通常這些可以設置爲配置值或db值。

+0

同意。您將切實需要Dev和QA中的不同規則,以便能夠測試這些類型的案例。 – mydoghasworms 2012-04-03 05:08:37

0

分解功能並測試各個步驟。

特定時間後過期的項目包括將項目放在具有過期時間戳的地方,而該程序的另一部分將使用舊時間戳過期項目。因此,使用正確的時間戳測試新項目是否正確插入,並且過期代碼能夠正確刪除30天或更早的項目。爲了測試,插入和移除的項目不必是相同的。

這同樣適用於在一段時間後發送的電子郵件。

1

我想你有像

if(token.ExpirationDateTime > DateTime.Now) 
{ 
    // do some job to expire 
} 

一般我提供與這樣的邏輯的類與Func<DateTime>類型的注入字段一些代碼。例如

public class ExpirationManager 
{ 
    private Func<DateTime> _nowProvider; 

    public ExpirationManager(Func<DateTime> nowProvider) 
    { 
    _nowProvider = nowProvider; 
    } 
} 

然後到期的代碼看起來像

if(token.ExpirationDateTime > _nowProvider()) 
{ 
    // do some job to expire 
} 

這種方式可以替代真實當前系統時間與你想要的任何DATATIME做試驗(如單元測試)時。

相關問題