簡體   English   中英

依賴於被調用接口的其他成員的單元測試方法

[英]Unit testing methods which depend on other member of the interface being called

假設我有一個名為IOrderContainer的接口:

public interface IOrderContainer
{
    ReadOnlyCollection<Order> Orders { get; }
    void AddOrder(Order order);
    void RemoveOrder(Order order);
    Order GetOrderById(int orderId);
}

該實現保留了一個私有的訂單集合,該集合由公共只讀集合Orders公開

AddOrderRemoveOrder修改私有集合。

我將如何單元測試GetOrderByIdRemoveOrder方法,如果有在接口上沒有公共成員初始化私人收藏的訂單?

最顯而易見的方法是調用AddOrder一堆時間來填充私人收藏,但我覺得它違反了單元測試的定義,因為測試RemoveOrder / GetOrderById ,我們依賴於另一個“單位” - AddOrder

我應該創建兩個構造函數嗎? 一個無參數構造函數和另一個接收集合並將其分配給私有集合的構造函數。

單元測試檢查一個實現(或者更好:它的行為),而不是一個接口。 因此,擁有一個具有多個構造函數的實現類是完全可以的,一個具有用於初始化集合的參數。

另一種方法是不填充集合並檢查例如 AddOrder 的行為是否正確:訂單是否添加到集合的先前內容中。 但即便如此,您仍在測試兩個“單元”(“Addorder”方法和集合的 getter)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM