【发布时间】:2022-01-21 16:02:54
【问题描述】:
我有一个有两个方法 add(obj) 和 remove(obj) 的类。当最初包含添加的属性的私有集合是私有的并且我已经读过访问私有字段以进行单元测试时,如何对 remove 方法进行单元测试。如果我首先使用 add 方法填充集合,则测试将不是单元测试,因为当 add 方法不起作用时它可能会失败。
class A
{
private readonly ICollection<object> objs = new List<object>();
public IReadOnlyCollection<object> Objs => this.objs.ToList();
public void Add(object obj)
{
this.objs.Add(obj);
}
public void Remove(object obj)
{
this.objs.Remove(obj);
}
}
【问题讨论】:
-
....collection the test will not be a unit test because it can fail when the add method doesn't work.我没有发现问题。这是一个常见的场景,即必须使用被测功能以外的功能来创建状态。如果您有 2 个失败的单元测试在 Add 上都失败,即使 Remove 正在其中一个测试中,IMO 也可以。 -
你可以使用
objs.Remove(obj)的返回值来判断它是否真的可以移除特定的对象。
标签: c# unit-testing