【问题标题】:AutoConfiguredMoqCustomization with abstract class implementing interface具有抽象类实现接口的 AutoConfiguredMoqCustomization
【发布时间】:2014-10-23 08:21:32
【问题描述】:

我使用 AutoFixture 3.21.0、AutoFixture.AutoMoq 3.21.0、NUnit 2.6.3 和 Moq 4.2.1409.1722。

我有以下接口,两个abstract类(其中一个实现了这个接口),还有两个单元测试。

测试通过。

    public interface IMigration
    {
        IMigrationParameters MigrationParameters { get; set; }
    }

    public abstract class AbstractSutWithoutInterface
    {
        public IMigrationParameters MigrationParameters { get; set; }
    }

    public abstract class AbstractSutWithInterface : IMigration
    {
        public IMigrationParameters MigrationParameters { get; set; }
    }

    [TestFixture]
    public class UnitTests
    {
        [Test]
        public void TestAbstractSutWithoutInterface()
        {
            var fixture = new Fixture();
            fixture.Customize( new AutoConfiguredMoqCustomization() );

            var mock = fixture.Create<AbstractSutWithoutInterface>();

            Assert.IsNotNull( mock.MigrationParameters ); // test passes
        }

        [Test]
        public void TestAbstractSutWithInterface()
        {
            var fixture = new Fixture();
            fixture.Customize( new AutoConfiguredMoqCustomization() );

            var mock = fixture.Create<AbstractSutWithInterface>();

            Assert.IsNull( mock.MigrationParameters ); // test passes
        }
    }

我的问题是为什么 AutoConfiguredMoqCustomization 对抽象类有不同的行为,具体取决于属性是否由接口定义?在第一个测试中,属性被断言为不为空,但在第二个测试中为空。如果类不是抽象的,则属性注入对两个类都按预期工作。

【问题讨论】:

  • 这些类是否缺少abstract 关键字?
  • @PatrickQuirk 感谢您指出源代码中缺少的关键字。我已经更正了。
  • 我无法复制,在这两种情况下它们对我来说都不为空。我用的是最新的 AutoFixture 版本,你用的是哪个?
  • @PatrickQuirk 我使用 AutoFixture 3.21.0、AutoFixture.AutoMoq 3.21.0、NUnit 2.6.3、Moq 4.2.1409.1722。请尝试使用最新的起订量版本。
  • 此错误已在AutoFixture.AutoMoq 3.24.2 中修复。

标签: moq autofixture


【解决方案1】:

2015/04/15 更新

此错误已在 AutoFixture.AutoMoq 3.24.2 中修复。详情见here

2014 年 11 月 3 日更新

目前正在 AutoFixture 的 GitHub 上进行跟踪,Issue 324

此外,Moq 的最新工作版本是 4.2.1402.2112,您可以降级到那个版本而不是 4.0。


我只能使用最新版本的最小起订量 (4.2.1409.1722) 重现此问题。

我现在正在调查这个问题,它seeeeems就像是在最新版本的 Moq 中引入了一个错误,但它可能是设计使然,我还不确定。

在此期间,请使用 4.0.10827 版本。要降级,请转到工具 -> NuGet 数据包管理器 -> 包管理器控制台并键入:

Uninstall-Package Moq -Force
Install-Package Moq -Version 4.0.10827

我会用我的发现更新这个答案。

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2012-07-17
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多