我想爲我的web應用程序編寫一些測試用例,但是在某些情況下卡住了,例如「此令牌應該在30天內過期」。在測試結束之前,沒有人喜歡等待30天。如何編寫用於測試「30天過期」之類的測試用例?
還有對於一些預定的事件發生,如「發送電子郵件的用戶,2周後報名」,「下一個結算日期前2天產生的法案」等
什麼建議其他情況你有寫這樣的測試用例嗎?或者,還有另外一種方法確保這些功能按照設計的精確工作?
我想爲我的web應用程序編寫一些測試用例,但是在某些情況下卡住了,例如「此令牌應該在30天內過期」。在測試結束之前,沒有人喜歡等待30天。如何編寫用於測試「30天過期」之類的測試用例?
還有對於一些預定的事件發生,如「發送電子郵件的用戶,2周後報名」,「下一個結算日期前2天產生的法案」等
什麼建議其他情況你有寫這樣的測試用例嗎?或者,還有另外一種方法確保這些功能按照設計的精確工作?
我寫這些測試的方法是定義以毫秒爲單位的過期時間。這樣,您可以輕鬆編寫測試,因爲您的測試環境可以定義1毫秒的終止時間。生產環境顯然會定義合適的持續時間。通常這些可以設置爲配置值或db值。
分解功能並測試各個步驟。
特定時間後過期的項目包括將項目放在具有過期時間戳的地方,而該程序的另一部分將使用舊時間戳過期項目。因此,使用正確的時間戳測試新項目是否正確插入,並且過期代碼能夠正確刪除30天或更早的項目。爲了測試,插入和移除的項目不必是相同的。
這同樣適用於在一段時間後發送的電子郵件。
我想你有像
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做試驗(如單元測試)時。
同意。您將切實需要Dev和QA中的不同規則,以便能夠測試這些類型的案例。 – mydoghasworms 2012-04-03 05:08:37