【发布时间】:2016-02-09 20:04:51
【问题描述】:
有没有办法最小化接口公开的对象的属性?
拥有:
interface IMyInterface {
CurrentContact CurrentContact { get; }
}
Contact 类有一个字段“BirtDate”,它在代码中的某处使用,因此需要模拟
public class CurrentContact : ContactEntity
{
public IEnumerable<CustomerAddress> ContactAddresses { get; }
public Organization ContactOrganization { get; }
...
所以我这样做:
customerContextMock = new Mock<IMyInterface>();
customerContextMock.Setup(x => x.CurrentContact.BirthDate)
.Returns(new CustomerContact {BirthDate = DateTime.MaxValue}.BirthDate);
但是我得到以下错误
附加信息:非虚拟设备上的无效设置(可在 VB) 成员:x => x.CurrentContact.BirthDate
有没有在不添加这个(以及任何其他字段)的情况下模拟这个,我需要将 moq 作为属性添加到 IMyInterface?
【问题讨论】:
-
你能显示
Contact类吗? -
它是一个第三方库,包含一堆非虚拟的 get{} 属性
-
你不能模拟非虚拟属性。但是,如果它们有设置器,您可以设置它们。
-
现在您的属性
CurrentContact缺少类型 -
有没有办法创建一个继承 CurrentContact 并使用“new”关键字添加 setter 的 Fake?那行得通吗?