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