gpt4 book ai didi

c# - 单元测试私有(private) Setter 问题(C#)

转载 作者:太空狗 更新时间:2023-10-29 19:53:31 24 4
gpt4 key购买 nike

我正在尝试测试一个名为 AddItem 的 Order 实体方法,并且我正在尝试确保不会添加重复的项目。下面是一些示例代码:

[Test]
public void ItemCannotBeAddedTwiceToOrder()
{
Order o = new Order();
Item i = new Item("Bike");

o.AddItem(i);
o.AddItem(i);

Assert.AreEqual(o.ItemCount, 1, "A duplicate item was added.");
}

public void AddItem(Item newItem)
{
if(!CheckForDuplicateItem(newItem))
_items.Add(newItem);
}

public bool CheckForDuplicateItem(Item newItem)
{
foreach(Item i in _items)
{
if(i.Id == newItem.Id)
return true;
}

return false;
}

所以这是我的问题:如何在测试方法中设置新项目的私有(private) setter ID,以便 CheckForDuplicateItem 方法起作用?我想我不想公开该成员以获得良好的编码实践。我是不是太蠢了,需要让实体 Item 有一个 public Id setter?还是我需要使用反射?谢谢

注意 - 我使用 NHibernate 来实现持久化

最佳答案

我通常为此目的使用反射。这样的事情会起作用:

typeof(Item).GetProperty(nameof(Item.Id)).SetValue(i, 1, null);

其中 1 是您要为 newItem 实例设置的 ID。

根据我的经验,您很少需要设置 Id,因此最好将 setter 设为私有(private)。在少数情况下,您确实需要设置 Id 以进行测试,只需使用反射即可。

关于c# - 单元测试私有(private) Setter 问题(C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/918341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com