[英]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
公開
AddOrder
和RemoveOrder
修改私有集合。
我將如何單元測試GetOrderById
和RemoveOrder
方法,如果有在接口上沒有公共成員初始化私人收藏的訂單?
最顯而易見的方法是調用AddOrder一堆時間來填充私人收藏,但我覺得它違反了單元測試的定義,因為測試RemoveOrder
/ GetOrderById
,我們依賴於另一個“單位” - AddOrder
。
我應該創建兩個構造函數嗎? 一個無參數構造函數和另一個接收集合並將其分配給私有集合的構造函數。
單元測試檢查一個實現(或者更好:它的行為),而不是一個接口。 因此,擁有一個具有多個構造函數的實現類是完全可以的,一個具有用於初始化集合的參數。
另一種方法是不填充集合並檢查例如 AddOrder 的行為是否正確:訂單是否添加到集合的先前內容中。 但即便如此,您仍在測試兩個“單元”(“Addorder”方法和集合的 getter)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.