【问题标题】:Is it worth to change class access modifier to public for unit testing from another assembly?是否值得将类访问修饰符更改为 public 以便从另一个程序集进行单元测试?
【发布时间】:2015-09-16 22:57:16
【问题描述】:

如果单元测试驻留在另一个程序集中,是否值得将类访问修饰符(最初为 no 或 internal )更改为 public 以进行单元测试? private 或 internal 表示类被封装在程序集中。如果答案是否定的,C# 中的解决方法是什么?

【问题讨论】:

  • 不要测试私有/内部方法 - 测试任何使用私有/内部方法。
  • 它是类访问修饰符 - 不是方法。就像公共课 Foo。在我的情况下,不测试整个班级是不可接受的。
  • 我在一个博客中发现了这一点:“有一个学派支持 only 公共 api 需要进行单元测试的政策。这不是真的 -我坚信你所有的方法和行为都需要单元测试。”
  • 也许有一些技巧 - 例如在 C++ 中,为了测试受保护的方法,我可以从测试类继承而无需更改测试代码。在 C# 中,如果它不是公共的,我不能从另一个程序集的测试类继承。
  • [InternalsVisibleTo] 可能会对您有所帮助。把所有东西都公开是个坏主意。您应该能够使用公共 API 覆盖所有代码。如果您无法从公共 API 访问它,您不妨删除该代码。

标签: c# unit-testing


【解决方案1】:

解决这个问题最简单的方法是应用测试驱动开发 (TDD),它更像是一种反馈机制而不是一种设计方法。

使用 TDD 时,您首先编写测试,因此应该立即清楚您的被测系统 (SUT) 是否难以测试。这为 SUT 的设计提供了一种易于测试的方式。

这并不意味着您可以妥协封装。您仍然应该坚持良好的面向对象设计原则。

如果这样做,则不应该存在任何未被测试覆盖的东西。您可能有内部类,但它们是通过其他公共类的公共成员间接测试的。 永远不要测试内部。如果你这样做,you're coupling your tests to those internals,这意味着它们还不如公开。

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 2010-09-26
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多