2

考虑一个链表类,我维护 2 个私有变量 1.firstNode 和 2.lastNode。因此,这些变量仅供内部使用,不会通过 getter 公开。我想测试操作是否按预期修改了这两个变量。例如:如果最后一个节点是重复的,则在排序的链表中消除重复应该更改最后一个节点。

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

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

4

4 回答 4

3

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

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

于 2013-08-26T01:38:00.760 回答
3

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

于 2013-08-26T02:35:58.680 回答
2
  1. 不。
  2. 你没有。您会将您的测试与您的实现结合起来。如果你要重构你的实现,你会希望有信心,如果你的测试继续工作而无需修改它,你就没有破坏任何东西。

想想如果这些变量没有正确更新会出现什么问题(即违反合同的哪一部分)。为此编写一个测试,证明它应该失败,然后确保它不会失败。

于 2013-08-27T11:54:11.010 回答
0

您可以尝试使其成为包级吸气剂。get 函数不会公开,但您仍然可以检查。

于 2013-08-26T00:56:27.603 回答