gpt4 book ai didi

c# - 如何在单元测试中设置自动增量 ID

转载 作者:行者123 更新时间:2023-12-03 21:50:09 24 4
gpt4 key购买 nike

我面临以下情况:

我的实体的 ID 是自动递增的,所以我将所有实体的 setter 设置为 private,但是当我想对我的域类进行单元测试时,我发现自己需要获取并设置ID。

如何设置 ID?

public WorkingTime(string name, short numberOfHours, short numberOfShortDays, int workingGroupId)
{
Name = name;
NumberOfHours = numberOfHours;
NumberOfShortDays = numberOfShortDays;
WorkingGroupId = workingGroupId;
ActivatedWorkingTimes = new List<WorkingTimeActivation>();
}

private ICollection<WorkingTimeActivation> _activatedWorkingTimes;

public int Id { get; private set; }
public string Name { get; set; }
public short NumberOfHours { get; set; }
public short NumberOfShortDays { get; set; }
public int WorkingGroupId { get; set; }
public virtual WorkingGroup WorkingGroup { get; set; }
public virtual ICollection<WorkingTimeActivation> ActivatedWorkingTimes { get => _activatedWorkingTimes; set => _activatedWorkingTimes = value; }

测试示例:

var workingGroup = new WorkingGroup("WG", 3, Week.Sunday, 2);
workingGroup.AssignedWorkingTimes.Add(new WorkingTime("Winter", 8, 1, 1));
workingGroup.AssignedWorkingTimes.Add(new WorkingTime("Summer", 6, 0, 1));

现在我想设置workingGroupId

Should I use public setter instead ?

最佳答案

Should I use public setter instead ?

可能不会,不。

有两种选择可供考虑。

一个是,如果标识符真的是私有(private)数据,那么测试应该不需要直接与它交互。我们将测试的范围限制在模型中可观察的副作用,以便我们以后可以自由更改私有(private)实现细节。

另一个是测试试图引起您的注意,您可能会使用不同的策略来生成标识符,并且不同的策略可能适用于不同的上下文 - - 一种用于生产代码的策略,另一种用于测试工具。

基本模式隔离了策略,并提供了控制应用哪种策略所需的功能。在测试中,我们使用 test double 来实现策略合约。 ,这允许 测试 保持对任意副作用的确定性控制。

关于c# - 如何在单元测试中设置自动增量 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50372335/

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