如何强制使用AutoConfiguredMoqCustomization配置的AutoFixture自动模拟接口及其只读属性?
为了清楚起见,让我们假设我有这样的界面:
public interface A {
int Property {get;}
}
Run Code Online (Sandbox Code Playgroud)
和这样的课程:
public class SomeClass {
public SomeClass(A dependency) {}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是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
Run Code Online (Sandbox Code Playgroud)
这是由于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);
Run Code Online (Sandbox Code Playgroud)
这就是AutoFixture在幕后创建实例的方式Interface.此测试失败,Moq版本等于或大于4.2.1502.911,但通过较低版本.
只需在Package Manager控制台上运行:
install-package Moq -version 4.2.1409.1722
Run Code Online (Sandbox Code Playgroud)
这个bug在这里被跟踪:https://github.com/Moq/moq4/issues/196
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |