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