更改私有字段状态的方法的单元测试

时间:2011-05-06 08:52:35

标签: c# unit-testing mstest

所以,我有以下问题(使用C#):

我在一个类中有两个私有字段,一个保存字段的原始状态,另一个保存更新的状态。

我现在想要编写一个基本上采用原始状态的方法,将其复制到更新状态并更改其内容。

到目前为止,我已经将它实现为一个只改变字段状态(如果需要)的void方法。这些字段稍后将被另一种方法使用。

我认为我的实现没有任何问题,但是我正在尝试为这个方法编写单元测试(使用MSTest),并且无法看到我如何正确地测试它。

我真正需要测试的是,给定输入参数是否该字段的内容与其原始状态相比发生了变化。由于这两个字段都是私有的,我既不能访问原始状态来为单元测试设置值,也不能访问字段以用于任何断言的任何比较。

最简单的方法是使用公共属性公开所有这些字段,但除了单元测试之外,我对公共属性没有任何用处。另一种方法是重写方法以返回更新状态,但这仍然无法帮助我将原始状态设置为测试所需的状态。

关于如何处理此问题的任何想法或最佳做法?

2 个答案:

答案 0 :(得分:3)

使用PrivateObject.GetField()检索该字段的最终状态。 (privateObject members

这是比修改API更好的途径,只是为了让它可以测试。

答案 1 :(得分:2)

如果字段被正确复制,它会发生什么可见更改?据推测,它会以某些的方式影响对象的行为......所以这是测试的理想选择。

为了可测试性,有时可能值得添加内部帮助器方法(与InternalsVisibleTo一起使用)但理想情况下,测试对可见行为/状态的更改是一种不太脆弱的方法。