AutoConfiguredMoqCustomization和不可设置的属性
本文关键字:属性 设置 AutoConfiguredMoqCustomization | 更新日期: 2023-09-27 18:08:22
我如何强制AutoFixture,已配置AutoConfiguredMoqCustomization,自动模拟接口及其只读属性?
为了更清楚,让我们假设我有这样一个接口:
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
这是由于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,则此测试失败,但如果版本低于4.2.1502.911,则通过。
在包管理器控制台中运行:
install-package Moq -version 4.2.1409.1722
这个bug在这里被跟踪:https://github.com/Moq/moq4/issues/196