【发布时间】:2013-01-17 15:38:11
【问题描述】:
我有一个想要伪造的复杂对象。
interface IContext
{
User User { get; }
}
A.CallTo(
() => _fakeContext.User.Subscription.Attributes)
.Returns(new List<Attribute>());
但我得到了下一个例外:
The current proxy generator can not intercept the specified method for the following reasons: - Non virtual methods can not be intercepted
所有嵌套类型都是属性,它们是带有get; set; 属性修饰符的简单贫血类型。当我查看调试器时,它们都是假的。
有什么方法可以设置链的最后一个属性,避免设置之前的所有属性?
【问题讨论】:
-
User上的属性是虚拟的吗?如果是这样,您可以发布User的源代码吗? -
没有。用户和订阅都不是虚拟的。它是来自已编译程序集的代码。
-
FakeItEasy 无法模拟非虚拟方法,因此您必须自己解决构建对象。像下面的答案一样可以解决问题。
标签: unit-testing mocking fakeiteasy