我可以使用FakeItEasy伪造Properties.Settings.Default属性吗?

时间:2014-07-21 16:44:33

标签: c# testing mocking stub fakeiteasy

我正在尝试做类似于A.CallTo(() => MyProject.Properties.Settings.Default.SomeProperty).Returns("Hello, World! ;-)");的事情,但我确实得到了......

  

无法拦截非虚拟方法。

......作为回报。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

FakeItEasy不能用于覆盖SomeProperty。问题是DefaultSettings类型的成员,它是sealed类。为了能够将A.CallToDefault.SomeProperty一起使用,Default必须是使用A.Fake<…>创建的虚假对象。

此外,SomeProperty需要是虚拟的或以其他方式覆盖,如文档的What can be faked页面所示。​​

如果你需要能够在测试中提供虚假配置,你可以在配置周围引入一层抽象,并假设你的生产代码使用一个委托给MyProject.Properties.Settings的具体类......

另一种选择(我认为是优越的)是完全避免伪造/嘲弄,只是直接改变设置,也许是通过这样做:

MyProject.Properties.Settings.Default.SomeProperty= "Hello, World! ;-)"

虽然正如评论中所指出的那样,如果属性有一个setter,这只是一个选项,似乎应用程序属性没有,但是User属性有。