2011-09-06 113 views
1

我在TDD方面還很新,而且我也在嘗試使用並非考慮到測試而構建的遺留應用程序。使用web服務時測試燈具

我試圖測試的一個功能(錯誤)是確定訂單是否處於允許用戶計劃交貨的狀態。

故事是:給定一個ReadyFrom日期> 10天的訂單,<從今天開始28天,其中[web服務測試訂單處於有效狀態以供交付]返回true,系統應列出7個可用送貨從ReadyFrom日期開始的日期

因此,我確定了一些適用於測試這些條件的命令。我想我也應該爲Web服務創建一個存根,所以它根據測試返回true或false。

我寫了一個失敗的測試,並使用它修復了使用實時數據庫副本的錯誤,問題在於下週,我一直使用的訂單將不再滿足一些條件,這些條件是基於系統日期。

難道我就在想,我應該把測試訂單到夾具和動態測試使用前的安裝過程中改變這些訂單相關的日期值,並動態地改變我的組交付日期的期望系統發回(交付日期也由網絡服務返回,這也必須被嘲笑)

或者這會在應用程序開發時引發問題嗎?

感謝

回答

0

把測試訂單到夾具

是。

設置

排序的過程中動態地改變這些訂單相關的日期值。

不要讓它太複雜 - 聽起來。夾具應該有一堆測試訂單,並且有固定的已知日期。你不應該改變太多。

如果 - 出於某種原因 - 日期無法修復,已知日期,那麼setUp會做三件事。

  1. 使用適當的日期「從頭開始」生成訂單。

  2. 配置適當日期的模擬。

  3. 保存一些「預期結果」提示,以便使用實際測試。

再次。不要讓它聽起來很複雜。你不是「動態改變我的期望」。你只需在setUp中設置期望值。

動態地改變我的組交付的預期日期的系統發回 (交貨日期也由一個Web服務,這將有太輕慢返回)

嘲諷網服務意味着日期可能是固定的。模擬和夾具應該能夠返回一組固定的日期。

0

我使用測試數據生成器模式來創建測試數據,並在測試方法本身中進行設置。恕我直言,它使非常可讀的測試代碼。建設者它的自我是這樣的(C#+ Rhinomocks):

public class OrderBuilder 
{ 
    MockRepository _mockRepository; 
    IOrder _order; 

    public OrderBuilder() 
    { 
    _mockRepository = new MockRepository(); 
    _order = _mockRepository.Stub<IOrder>(); 
    } 

    public OrderBuilder WithDate(DateTime date) 
    { 
    _order.Date = date; 
    return this; 
    } 

    public IOrder Build() 
    { 
    _mockRepository.ReplayAll(); 
    return _order; 
    } 

} 

在爲了與此語法創建的測試方法:

DateTime someValidDate = new DateTime(1,2,2012); 

IOrder order = new OrderBuilder() 
         .WithDate(someValidDate) 
         .Build(); 

是不是很漂亮? :o)

+0

我會再調查一下,我想我理解了這個概念。謝謝 –