我使用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.如果类不是抽象的,则属性注入对于两个类都按预期工作.
更新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)
我会用我的发现更新这个答案.