如何对私有变量进行单元测试?

时间:2013-08-26 00:32:01

标签: unit-testing junit

考虑一个linkedlist类,我维护了2个私有变量1. firstNode和2. lastNode。这些变量仅供内部使用,不通过吸气剂暴露。我想测试操作是否按预期修改这两个变量。例如:如果最后一个节点是重复的,则删除已排序的链表中的副本应该更改最后一个节点。

  1. 我应该只为单元测试添加一个显式的getter吗?

  2. 如果没有,那么如何访问私有未曝光变量的值?

4 个答案:

答案 0 :(得分:3)

您不应该测试私有变量,只测试公开的变量。测试私有数据正在测试非常脆弱的实现细节。如果您要更改实现,那些测试将失败或不再编译。

相反,编写仅测试公共API的测试。在使用链表的示例中,测试应该修改列表,然后使用公共方法遍历结构,从节点到节点,以确保所有节点都正确。

答案 1 :(得分:3)

不要这样做。您应该测试链接列表的行为,而不是实现。了解链表在各种情况下的行为方式,并从预期的行为中推导出测试用例。如果您发现自己编写的测试用例需要查看类的实现(包括其私有成员),那么您的测试实际上并不能确保类行为的正确性。

答案 2 :(得分:1)

  1. 没有
  2. 你没有。您可以将测试与实施相结合。如果你要重构你的实现,你会希望有信心,如果你的测试继续工作而不必修改它,你就没有破坏任何东西。
  3. 如果没有正确更新这些变量,请考虑会出现什么问题(即合同的哪一部分将被违反)。为此编写测试,证明它应该失败,然后确保它不会失败。

答案 3 :(得分:0)

您可以尝试使其成为包级别的getter。 get函数不会被暴露,但你仍然可以检查。