带有受保护设置器的最小起订量属性
我想要 Moq 下一个对象:
abstract class Foo
{
public string Bar { get; protected set; }
}
以便 new Mock
返回 "Blah"
。
我怎样才能做到这一点?
fooMock.SetupGet<string>(s => s.Bar).Returns("Blah");
投掷
失败:System.NotSupportedException:非虚拟成员上的设置无效:s => s.日期
和
fooMock.Protected().SetupGet<string>("Bar").Returns("Blah");
抛出
要指定公共属性 StatementSection.Date 的设置,请使用类型化重载
I want to Moq next object:
abstract class Foo
{
public string Bar { get; protected set; }
}
so that new Mock<Foo>().Bar
return "Blah"
.
How can I do that?
fooMock.SetupGet<string>(s => s.Bar).Returns("Blah");
throws
Failure: System.NotSupportedException : Invalid setup on a non-virtual member: s => s.Date
and
fooMock.Protected().SetupGet<string>("Bar").Returns("Blah");
throws
To specify a setup for public property StatementSection.Date, use the typed overloads
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
就像 Felice (+1) 所说的那样,模拟创建了一个代理,这意味着您需要将事物虚拟化(这样 Moq 就可以发挥其代理魔力并覆盖该属性)。
作为替代方案,如果您只想注入一个值,您可以手动存根要测试的类并公开获取设置器的方法:-
Like Felice (+1) said mocking creates a proxy which means you need to either make things virtual (so Moq can work its proxying magic and override the property).
As an alternative if you just want to squirt in a value you can manually stub the class you want to test and expose a means to get at the setter:-
由于模拟是通过创建类的代理来完成的,因此只有虚函数/属性可以被“moqued”
Since mocking is done by creating a proxy of your class,only virtual function/property can be "moqued"
下面是提供代理类的示例,该代理类可以通过其构造函数修改受保护的属性(
MyClass
由MyClassProxy
代理)。测试是 XUnit。Here's an example of providing a proxy class that can modify the protected property via it's constructor (
MyClass
is proxied byMyClassProxy
). Tests are XUnit.