Autofixture: 问题:使用 AutoMoqCustomization 设置嵌套依赖项模拟

创建于 2016-04-15  ·  5评论  ·  资料来源: AutoFixture/AutoFixture

我尝试使用AutoMoqCustomization自动模拟具有嵌套依赖项的对象图,结果与我预期的不一样。 这是测试代码,有人可以告诉我为什么在冻结Mock<IObject>出现另一个由 Moq 创建的IObject由夹具创建的情况吗?

[TestClass]
    public class MyTestClass
    {
        [TestMethod]
        public void Test()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var objMock = fixture.Freeze<Mock<IObject>>();
            var sut = fixture.Create<Dependant2>();

            sut.Obj.Should().BeSameAs(objMock);
        }
    }

    public interface IObject { }

    public interface IDependant { IObject Obj { get; } }

    public class MyObject : IObject { }

    public class Dependant2
    {
        public Dependant2(IDependant dependant)
        {
            Obj = dependant.Obj;
        }

        public IObject Obj { get; }
    }

最有用的评论

AutoMoqCustomization创建模拟对象但不设置它们。

如果您希望设置模拟的成员,请考虑使用AutoConfiguredMoqCustomization代替。 它将 a) 设置模拟的公共可设置属性和 b) 设置方法/索引器以返回(和记忆)由装置懒惰生成的值

有两个限制。 它没有设置:

  • 带有ref参数的方法
  • 通用方法

备忘单底部的更多信息。

所有5条评论

AutoMoqCustomization创建模拟对象但不设置它们。

如果您希望设置模拟的成员,请考虑使用AutoConfiguredMoqCustomization代替。 它将 a) 设置模拟的公共可设置属性和 b) 设置方法/索引器以返回(和记忆)由装置懒惰生成的值

有两个限制。 它没有设置:

  • 带有ref参数的方法
  • 通用方法

备忘单底部的更多信息。

感谢您的快速回复! 我在IDependant尝试使用方法而不是属性AutoConfiguredMoqCustomization IDependant并且它尊重冻结的实例。 有没有办法使不可设置的属性也受到尊重? 使用 Moq,即使没有 setter 也可以设置属性 getter。

其实,没关系。 它也设置了 get-only 属性,我不好。

我还记得 Moq 中的一个错误会干扰 AutoMoq,使其无法设置 get-only 属性。 至少在我研究这个时,您必须使用 Moq 版本 4.2.1409.1722 或更低版本(详细信息位于 #434)。 也许该错误已在较新版本的 Moq 中修复,我不确定。

尝试了低于 4.2.1409.1722 的最高 Moq 版本,你是对的,它也适用于 get-only 属性。 Moq 错误未在较新版本中修复,因为我尝试了最新版本。 非常感谢您的帮助

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

gtbuchanan picture gtbuchanan  ·  3评论

zvirja picture zvirja  ·  4评论

malylemire1 picture malylemire1  ·  7评论

Accc99 picture Accc99  ·  4评论

Ridermansb picture Ridermansb  ·  4评论