最小起订量不保留 属性 值

Moq Does Not Preserve Property Values

我的单元测试中有一个模拟对象 属性。在我测试的某个时刻,代码崩溃了,因为 属性 returns 为空,即使它只是设置为非空值。我已经尝试将 SetupAllProperties()SetupProperty() 与 属性 一起使用,并明确构建 SetupGetSetupSet

setAlignment = new Alignment();
mockSetAlignmentRandomizer.SetupAllProperties();

mockSetAlignmentRandomizer.SetupSet(r => r.SetAlignment = It.IsAny<Alignment>()).Callback<Alignment>(value => setAlignment = value);
mockSetAlignmentRandomizer.SetupGet(r => r.SetAlignment).Returns(() => setAlignment);

mockSetAlignmentRandomizer.Setup(r => r.Randomize()).Returns(mockSetAlignmentRandomizer.Object.SetAlignment);
mockSetLevelRandomizer.Setup(r => r.Randomize()).Returns(mockSetLevelRandomizer.Object.SetLevel);

mockAlignmentGenerator.Setup(f => f.GenerateWith(mockSetAlignmentRandomizer.Object)).Returns(() => mockSetAlignmentRandomizer.Object.SetAlignment);
mockAlignmentGenerator.Setup(f => f.GenerateWith(mockAnyAlignmentRandomizer.Object)).Returns(() => new Alignment());

AlignmentGenerator 到达此处时出现问题:

do setAlignmentRandomizer.SetAlignment = alignmentGenerator.GenerateWith(anyAlignmentRandomizer);
while (allowedAlignments.Contains(setAlignmentRandomizer.SetAlignment.ToString()) == false);

即使我可以确认生成器吐出一个新的 Alignment 对象,setAlignmentRandomizer 上的 属性 始终是 null,这使得整个评估抛出意外错误。是的,我还确认 allowedAlignments 集合(在代码的其他地方创建)也不为空。我在这里做错了什么?

答案是我是个笨蛋。整个测试 class 的设置非常复杂,不幸的是,在一片混乱中,我错过了我不止一次不小心更新了那个模拟 - 我第一次正确设置了属性,但是然后第二次更新它,并丢失了所有设置。