最小起订量不保留 属性 值
Moq Does Not Preserve Property Values
我的单元测试中有一个模拟对象 属性。在我测试的某个时刻,代码崩溃了,因为 属性 returns 为空,即使它只是设置为非空值。我已经尝试将 SetupAllProperties()
、SetupProperty()
与 属性 一起使用,并明确构建 SetupGet
和 SetupSet
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 的设置非常复杂,不幸的是,在一片混乱中,我错过了我不止一次不小心更新了那个模拟 - 我第一次正确设置了属性,但是然后第二次更新它,并丢失了所有设置。
我的单元测试中有一个模拟对象 属性。在我测试的某个时刻,代码崩溃了,因为 属性 returns 为空,即使它只是设置为非空值。我已经尝试将 SetupAllProperties()
、SetupProperty()
与 属性 一起使用,并明确构建 SetupGet
和 SetupSet
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 的设置非常复杂,不幸的是,在一片混乱中,我错过了我不止一次不小心更新了那个模拟 - 我第一次正确设置了属性,但是然后第二次更新它,并丢失了所有设置。