【发布时间】:2017-07-23 19:53:10
【问题描述】:
我很难对包含对象列表的类进行单元测试。
这就是我所拥有的
public class A
{
List<B> _list;
public A()
{
_list = new List<B>();
}
public void AddNewB(DateTime time)
{
_list.Add(new B(time));
}
public List<B> GetAllBs()
{
return _list;
}
}
我想要一个测试来证明添加新的 B 不会清除我的列表。但是由于该列表是私有的,所以我无法设置一个现有的列表,而不会通过我想要测试的代码。由于类 A 负责创建所有新 B 并将它们添加到它的列表中,并且所有新 A 都应该有一个空的 B 列表,因此在构造函数中添加一个参数以进行测试感觉很奇怪。
编辑:我修复了 GetAllBs,因为它是 AddNewBs 的复制粘贴错误。
【问题讨论】:
-
请记住,您要测试的单元是类,而不是方法。只要类的公共接口表现自己,你就不应该关心它在内部做什么。就您的测试而言,
_list甚至可能不存在。 -
您可能想阅读此stackoverflow.com/a/1093481/2096538。你不应该关心类的内部实现,你应该检查外部可见的效果是否符合你的期望,否则你的测试会绑定到类的内部实现。
-
调用我想测试的方法来设置我的测试我感觉很奇怪。
标签: c# unit-testing asp.net-core nunit