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)