【问题标题】:Unit testing methods which depend on other member of the interface being called依赖于被调用接口的其他成员的单元测试方法
【发布时间】:2019-12-10 15:40:40
【问题描述】:

假设我有一个名为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.

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

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

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

    另一种方法是不填充集合并检查例如AddOrder 行为正确:是否将订单添加到集合的先前内容中。但即便如此,您仍在测试两个“单元”(“Addorder”方法和集合的 getter)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多