如何在不先添加元素的情况下测试删除方法

问题描述 投票:0回答:2

我有一个类,有两个方法 add(obj) 和 remove(obj)。当最初保存添加属性的私有集合是私有的时,如何对删除方法进行单元测试,并且我读到访问私有字段进行单元测试是一个不好的做法。如果我首先使用 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);
    }
}
c# unit-testing
2个回答
0
投票

这仍然是一个单元测试,因为您的单元是

A

进行一些设置是完全可以的。

有时不止一项测试失败。在您的情况下,如果添加不起作用,则删除测试会失败。

// It is possible to add item to A.
// Arrange.
var sut = new A();
// Act.
sut.Add("a");
// Assert.
sut.Objs.Single().Should().Be("a", Reason: "Item is added.");
// It is possible to remove item from A.
// Arrange.
var sut = new A();
sut.Add("a");
sut.Objs.Single().Should().Be("a", Reason:"Sanity check");
// Act.
sut.Remove("a");
// Assert.
sut.Objs.IsEmpty(Reson: "Item is removed.");

0
投票

为了解决这个问题,我们将使用提供的现金流计算两个项目的 NPV、IRR 和 PI(盈利能力指数)。然后,我们将根据每个标准对项目进行排名。

首先,我们来计算两个项目的 NPV:

© www.soinside.com 2019 - 2024. All rights reserved.