C# 依赖于被调用接口的其他成员的单元测试方法

C# 依赖于被调用接口的其他成员的单元测试方法,c#,unit-testing,C#,Unit Testing,假设我有一个名为IOrderContainer的接口: public interface IOrderContainer { ReadOnlyCollection<Order> Orders { get; } void AddOrder(Order order); void RemoveOrder(Order order); Order GetOrderById(int orderId); } 公共接口IOrderContainer { 只读收集顺序

假设我有一个名为
IOrderContainer
的接口:

public interface IOrderContainer
{
    ReadOnlyCollection<Order> Orders { get; }
    void AddOrder(Order order);
    void RemoveOrder(Order order);
    Order GetOrderById(int orderId);
}
公共接口IOrderContainer
{
只读收集顺序{get;}
无效订单(订单);
撤销撤销令(下单);
订单GetOrderById(int-orderId);
}
该实现保留一个订单的私有集合,该集合由公共只读集合
orders

AddOrder
RemoveOrder
修改私人收藏

如果接口上没有公共成员来初始化private orders集合,我将如何对
GetOrderById
RemoveOrder
方法进行单元测试

显而易见的方法是多次调用AddOrder来填充私有集合,但我觉得它违反了单元测试的定义,因为要测试
RemoveOrder
/
GetOrderById
,我们依赖另一个“单元”-
AddOrder


我应该创建两个构造函数吗?一个是无参数构造函数,另一个是接受集合并将其分配给私有集合的构造函数。

单元测试检查的是实现(或者更好的是:它的行为),而不是接口。因此,拥有一个具有多个构造函数的实现类是完全可以的,其中一个具有用于初始化集合的参数


另一种方法是不填充集合,并检查AddOrder是否正常工作:是否将该订单添加到集合先前的内容中。但即使这样,您仍然在测试两个“单元”(Addorder方法和集合的getter)。

单元测试检查的是实现(或者更好的是:它的行为),而不是接口。因此,拥有一个具有多个构造函数的实现类是完全可以的,其中一个具有用于初始化集合的参数

另一种方法是不填充集合,并检查AddOrder是否正常工作:是否将该订单添加到集合先前的内容中。但即使这样,您仍然在测试两个“单元”(Addorder方法和集合的getter)