关于c#:公开私有方法对其进行单元测试…好主意?

Making a private method public to unit test it…good idea?

本问题已经有最佳答案,请猛点这里访问。

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

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

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

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

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

UPDATE

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