AutoConfiguredMoqCustomization与抽象类实现接口

时间:2014-10-23 08:21:32

标签: 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
        }
    }

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

1 个答案:

答案 0 :(得分:5)

更新2015/04/15

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

更新2014/11/03

现在正在AutoFixture的GitHub Issue 324上跟踪。

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


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

我现在正在研究这个问题,并且它已经在最新版本的Moq中引入了 seeeeems ,但它可能是设计的,我还不确定。< / p>

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

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

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