我有一个类,有两个方法 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);
}
}
这仍然是一个单元测试,因为您的单元是
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.");
为了解决这个问题,我们将使用提供的现金流计算两个项目的 NPV、IRR 和 PI(盈利能力指数)。然后,我们将根据每个标准对项目进行排名。
首先,我们来计算两个项目的 NPV: