单独的单元测试是否是通过getter公开私有实例变量的一个很好的理由?

Git*_*g'a 101 java unit-testing

我有一个用于在有序页面列表中来回导航的类.页面通常但不总是按顺序访问.有时可能会根据某些规则跳过一个或多个页面.

为了解决这个问题,我保留了两个向前和向后的堆栈,以跟踪先前在任一方向上访问过哪些页面.

就这个类的功能而言,它没有理由暴露这些堆栈.然而,当单元测试导航方法first(),next(),previous()并且last(),所有重组的堆栈,并返回相应的页面,我需要检查堆栈是在正确的"状态"的过程结束.

例如,调用first()应该清除前向堆栈,并将之前访问过的每个其他页面推送到后向堆栈.

这是否足以成为为前后堆叠提供吸气剂的理由?我犹豫不决的一个原因是,我担心这也会使他们暴露于(可能无意中)可能导致班级出现故障的外部操纵.如果客户端清除堆栈怎么办?

UPDATE

有人建议这个问题与此处发布的问题重复.我认为这两个问题并不完全相同.另一个问题讨论了重构私有方法以使其公开以便能够对其进行测试的想法.另一方面,这个问题具体是通过检查测试对象的内部状态来测试公共方法.我认为那里有一个微妙但显着的差异,并且接受的答案清楚地表明如何在不检查内部状态的情况下测试相同的公共方法.