如何对仅执行foreach的方法进行单元测试

时间:2013-04-08 07:48:47

标签: c# unit-testing

我的类中有一个简单的方法,它将一个元素放在缓存中:

public void Put(TItem item)
{
  // Do something
}

现在我添加了另一种方法,可以同时放置多个元素:

public void Put(IEnumerable<TItem> items)
{
    foreach (var item in items)
    {
        Put(item);
    }
}

似乎为了避免重复,我应该只检查我多次调用Put。但我只能间接地这样做,因为这不是一种依赖。有没有办法在测试这些方法时避免复制/粘贴?我可以做一个冒烟测试来检查Put的一些结果,但是它自己有很多单元测试,在这种情况下它们不会完整。有什么好办法摆脱这种情况吗?

1 个答案:

答案 0 :(得分:4)

我会对各种条件进行测试,但只对Put本身的结果进行最少的验证 - 我假设有一些相当的简单方法来检查项目是否已经过放?

可能的测试:

  • 空参数
  • 空集合
  • 一个条目的集合(理智)
  • 收集两个条目(理智)
  • 带有重复条目(x,y,x)的集合
  • 如果可行的话,提前提交会导致异常的收集

现在可以肯定的是,对于一个简单的foreach循环可能会被视为过度杀伤。我喜欢“测试直到恐惧变成无聊”的口号。