AutoConfiguredMoqCustomization与抽象类实现接口

sgn*_*gon 5 moq autofixture

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

我有以下接口,两个抽象类(其中一个实现此接口)和两个单元测试.

测试通过.

    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
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

dca*_*tro 5

更新2015/04/15

此错误已在AutoFixture.AutoMoq 3.24.2修复.详情请见此处.

更新2014/11/03

现在正在AutoFixture的GitHub上讨论这个问题324.

此外,Moq的最后一个工作版本是4.2.1402.2112,你可以降级到那个而不是4.0.


我只能使用最新版本的Moq(4.2.1409.1722)重现这一点.

我期待这个,现在,它seeeeems像一个bug已经在起订量的最新版本已经出台,但也可能是在设计上,我还没有确定.

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

Uninstall-Package Moq -Force
Install-Package Moq -Version 4.0.10827
Run Code Online (Sandbox Code Playgroud)

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