[英]Unit Testing a class with a call to a Static class wrapping an HttpContext
[英]Unit Testing a Class Wrapping a Container
我的课程包装了C#列表以通过输入验证对其进行扩展。 我测试了使用有效数据调用AddRows()方法的简单情况,并检查项目已添加到内部列表中。
在我看来,我的测试应该只关心是否在List上调用AddRange(),但是实际上我必须手动检查这些元素是否已添加到基础列表中。 我认为这超出了测试范围,因为它是由List而不是ManagedList提供的测试功能。
我可以通过将List注入到ManagedList类的依赖关系中并在测试中替代模拟列表中来解决此问题,该列表可以验证是否使用正确的数据调用了AddRange()。 但是,必须将List作为依赖项传递到我的ManagedList类中似乎有点过头。
我觉得我有2种选择:
我是否在这里缺少明显的第三种选择? 如果不是,则上述哪一项是更可取的选择?
综上所述
托管列表类
class ManagedList
{
private readonly List<Dictionary<string, object>> _data = new List<Dictionary<string, object>>();
public ReadOnlyCollection<Dictionary<string, object>> GetData()
{
return new ReadOnlyCollection<Dictionary<string, object>>(_data);
}
public void AddRows(List<Dictionary<string, object>> rows)
{
if (rows.Any(row => !row.ContainsKey("id")))
throw new Exception("All rows must have an id");
_data.AddRange(rows);
}
}
测试
[Test]
public void AddRowsSucceedsWithId()
{
var managedList = new ManagedList();
var row = new Dictionary<string, object> {{"id", "Item1"}};
var rows = new List<Dictionary<string, object>> {row, row, row};
CollectionAssert.IsNotSupersetOf(managedList.GetData(), rows);
managedList.AddRows(rows);
CollectionAssert.IsSupersetOf(managedList.GetData(), rows);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.