我正在尝试做类似于A.CallTo(() => MyProject.Properties.Settings.Default.SomeProperty).Returns("Hello, World! ;-)");
的事情,但我确实得到了......
无法拦截非虚拟方法。
......作为回报。
有什么想法吗?
答案 0 :(得分:1)
FakeItEasy不能用于覆盖SomeProperty
。问题是Default
是Settings
类型的成员,它是sealed
类。为了能够将A.CallTo
与Default.SomeProperty
一起使用,Default
必须是使用A.Fake<…>创建的虚假对象。
此外,SomeProperty
需要是虚拟的或以其他方式覆盖,如文档的What can be faked页面所示。
如果你需要能够在测试中提供虚假配置,你可以在配置周围引入一层抽象,并假设你的生产代码使用一个委托给MyProject.Properties.Settings
的具体类......
另一种选择(我认为是优越的)是完全避免伪造/嘲弄,只是直接改变设置,也许是通过这样做:
MyProject.Properties.Settings.Default.SomeProperty= "Hello, World! ;-)"
虽然正如评论中所指出的那样,如果属性有一个setter,这只是一个选项,似乎应用程序属性没有,但是User属性有。