考虑一个链表类,我维护 2 个私有变量 1.firstNode 和 2.lastNode。因此,这些变量仅供内部使用,不会通过 getter 公开。我想测试操作是否按预期修改了这两个变量。例如:如果最后一个节点是重复的,则在排序的链表中消除重复应该更改最后一个节点。
我应该只为单元测试添加一个明确的getter吗?
如果没有,那么如何访问私有未公开变量的值?
考虑一个链表类,我维护 2 个私有变量 1.firstNode 和 2.lastNode。因此,这些变量仅供内部使用,不会通过 getter 公开。我想测试操作是否按预期修改了这两个变量。例如:如果最后一个节点是重复的,则在排序的链表中消除重复应该更改最后一个节点。
我应该只为单元测试添加一个明确的getter吗?
如果没有,那么如何访问私有未公开变量的值?
你不应该测试私有变量,只测试公开的东西。测试私有数据是测试非常脆弱的实现细节。如果您要更改您的实现,这些测试将失败或不再编译。
相反,编写仅测试公共 API 的测试。在您使用链接列表的示例中,您的测试应该修改列表,然后使用公共方法遍历结构以从一个节点到另一个节点,以确保所有节点都是正确的。
不要这样做。你应该测试你的链表的行为,而不是它的实现。找出你的链表在各种情况下应该如何表现,并从它的预期行为中推导出测试用例。如果您发现自己编写的测试用例需要查看类的实现(包括其私有成员),那么您的测试实际上并不能确保类行为的正确性。
想想如果这些变量没有正确更新会出现什么问题(即违反合同的哪一部分)。为此编写一个测试,证明它应该失败,然后确保它不会失败。
您可以尝试使其成为包级吸气剂。get 函数不会公开,但您仍然可以检查。