【发布时间】: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