所以,我有以下问题(使用C#):
我在一个类中有两个私有字段,一个保存字段的原始状态,另一个保存更新的状态。
我现在想要编写一个基本上采用原始状态的方法,将其复制到更新状态并更改其内容。
到目前为止,我已经将它实现为一个只改变字段状态(如果需要)的void方法。这些字段稍后将被另一种方法使用。
我认为我的实现没有任何问题,但是我正在尝试为这个方法编写单元测试(使用MSTest),并且无法看到我如何正确地测试它。
我真正需要测试的是,给定输入参数是否该字段的内容与其原始状态相比发生了变化。由于这两个字段都是私有的,我既不能访问原始状态来为单元测试设置值,也不能访问字段以用于任何断言的任何比较。
最简单的方法是使用公共属性公开所有这些字段,但除了单元测试之外,我对公共属性没有任何用处。另一种方法是重写方法以返回更新状态,但这仍然无法帮助我将原始状态设置为测试所需的状态。
关于如何处理此问题的任何想法或最佳做法?
答案 0 :(得分:3)
使用PrivateObject.GetField()
检索该字段的最终状态。 (privateObject members)
这是比修改API更好的途径,只是为了让它可以测试。
答案 1 :(得分:2)
如果字段被正确复制,它会发生什么可见更改?据推测,它会以某些的方式影响对象的行为......所以这是测试的理想选择。
为了可测试性,有时可能值得添加内部帮助器方法(与InternalsVisibleTo
一起使用)但理想情况下,测试对可见行为/状态的更改是一种不太脆弱的方法。