对于单元测试用例,将Private方法更改为Public是一个很好的做法

时间:2017-09-23 11:29:43

标签: unit-testing moq

最近,我正在研究遗留代码的单元测试用例,在编写测试用例时,我提出了一个问题。

因为我正在编写单元测试用例而不是集成测试。问题出在私有方法上。在我们的代码中,公开方法依赖于5 私有方法

对于单元测试用例,我需要给出私有方法的假实现,但由于方法是私有的,我无法这样做。 因为 MOQ模拟框架不支持私有方法的模拟功能。甚至我也无法编写私有方法的测试用例。

我正在考虑的可能方法

将所有私有方法移动到不同的类中。并使它们公开,并创建此类的接口。通过这种方式,我可以在运行时提供虚假实现,因为现在我们有类的接口。

但是这种方法的问题是我需要将这个私有方法公开用于单元测试用例。因此,将其公之于众是一种很好的做法。

1 个答案:

答案 0 :(得分:1)

当我开始看到自己编写很多私有方法时,我通常会拆分类。但是你有几个选择:

  1. 仅对公开界面进行全面测试。你应该覆盖你的私人方法。

    • 对于将所有功能保持在一起有意义的类有效。也就是说,该课程已经很好地抽象,并且具有单一责任。
    • 如果在课堂上保留这些私人方法,可能会很痛苦,这意味着每个案例都需要更多的模拟和设置。
  2. 您可以制作私有方法internal,并将测试项目指定为friend assembly。然后他们可以直接进行单元测试。

    • 如果拆分课程没有意义,这可以再次有效。
    • 当你有一堆由一个公共方法调用的私有方法时,这比测试公共接口更有优势。如果您想测试其中一个私有方法的一部分,则不必设置公共方法所需的所有内容。这也使事情更容易理解和调试。
  3. 您已经考虑过的解决方案。有时难以测试的代码表明内部有一个类试图爆发。

    • 如果您可以将部分或全部私有功能分组到命名实体中,则可能需要将其拆分。 特别是如果您有其他情况可以重复使用此类。
    • 如果您的原始类具有较大的依赖项列表,并且您可以使用此选项减少它,这也是一个不错的选择。