4

我在 TDD 环境中工作,基本上我面临一个困境,我认为这在 TDD 环境中非常重要。作为程序员,您希望您的方法尽可能具有可读性。为了实现这一点,我们也倾向于将我们的方法划分为多个私有方法。在这样做的同时,所有移至私有函数的代码都失去了它的测试能力。

Rhino 测试类看不到所有这些私有方法,我还需要能够针对这些方法运行测试。我不希望他们公开,因为让他们公开是没有意义的。

有任何想法吗?

4

2 回答 2

8

如果我引用您问题的一部分:

[...] 我们倾向于将我们的方法划分为多个私有方法 [...]

这是错误的。如果您遵循单一职责原则和良好的 OOP 设计,您的方法将更加独立和简单。如果您想提取另一种私有方法以使您的公共方法看起来更短,请先考虑一下。也许,你可以在一个单独的类中重构它?

你不测试私有方法,因为你测试的是公共合约而不是实现的细节。如果您想拥有与私有方法测试非常相似的东西,请将它们设为内部并设置InternalsVisibleTo属性。

另一种方法(由 R. Harvey 指出)是编写一个包装类,将私有方法包装成公共方法。这种方法的好处是您不需要将私有方法设为internal。不利的一面是,对于每个私有方法,您都将拥有一个包装器公共方法。所以方法的数量可能会翻倍。

于 2012-07-09T19:38:16.470 回答
3

正如其他人所建议的那样,测试非公共方法的一种方法是将它们设为内部并使用InternalsVisibleTo属性。但是,我强烈建议不要这样做。

单元测试应该通过测试使用它们的公共方法来覆盖私有方法。当然,随着时间的推移以及您向被测类添加更多功能,设置测试变得越来越复杂。这是一个很好的指标,表明该类承担了太多责任,您应该将其拆分为多个较小的类。然后,您可以使这些较小的类成为原始类的依赖项并在您的测试中模拟它们——这将再次简化测试。

这样做时,您不必完全放弃私有方法 - 使用它们来使您的代码更具可读性而不使用注释是一个好主意。

于 2012-07-09T19:46:35.137 回答