如何强制使用AutoConfiguredMoqCustomization配置的AutoFixture自动模拟接口及其只读属性?
为了清楚说明,我们假设我有这样的界面:
public interface A {
int Property {get;}
}
和这样的课程:
public class SomeClass {
public SomeClass(A dependency) {}
}
我想要的是让dependency
解析为将在dependency.Property
中返回内容的模拟:
var fixture = new Fixture().Customize(new AutoConfiguredMoqCustomization());
var sut = fixture.Create<SomeClass>(); // <- dependency passed to SomeClass' constructor will have .Property returning null
答案 0 :(得分:5)
这是由于Moq 4.2.1502.911中引入了一个错误,其中SetupAllProperties
会覆盖以前在get-only属性上完成的设置。
这是一个更简单的复制品:
public interface Interface
{
string Property { get; }
}
var a = new Mock<Interface>();
a.Setup(x => x.Property).Returns("test");
a.SetupAllProperties();
Assert.NotNull(a.Object.Property);
这就是AutoFixture在幕后创建Interface
实例的方式。此测试失败,Moq版本等于或大于4.2.1502.911,但通过较低版本。
只需在软件包管理器控制台上运行:
install-package Moq -version 4.2.1409.1722
此处正在跟踪此错误:https://github.com/Moq/moq4/issues/196