我面临以下情况:
我的实体的 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/