我们有一个引用 WCF 服务的 MVC 项目。这些引用将 (ExtensionDataObject)ExtensionData
属性添加到每个 DTO 和 Response 对象,现在 AutoFixture
无法创建这些类型的匿名实例。
例子:
public partial class SearchResultsDto : object,
System.Runtime.Serialization.IExtensibleDataObject,
System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
}
代码:
_fixture = new Fixture().Customize(new AutoMoqCustomization());
var dto = _fixture.CreateAnonymous<SearchResultsDto>();
异常(exception):
Ploeh.AutoFixture.ObjectCreationException: Ploeh.AutoFixture.ObjectCreationException: AutoFixture was unable to create an instance from System.Runtime.Serialization.ExtensionDataObject, most likely because it has no public constructor, is an abstract or non-public type..
问题:有没有办法在 AutoFixture 中注册这个对象,以便将其实例化为 null
或其他任何东西,这样我就可以对所有对象执行 CreateAnonymous
具有 ExtensionData
属性的对象。
最佳答案
最简单的方法是:
fixture.Register<ExtensionDataObject>(() => null);
用给定的 Func 向 AutoFixture 注册一个初始化所有 ExtensionDataObject 的特定方法。在这种情况下,Func 总是返回 null,所以您可以开始了。
关于c# - Ploeh AutoFixture 无法从 System.Runtime.Serialization.ExtensionDataObject 创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15478897/