【问题标题】:Testing methods called from another method [duplicate]从另一种方法调用的测试方法[重复]
【发布时间】:2012-03-21 09:17:35
【问题描述】:

我有一个类,其方法名为DataIn(int InputID, string CSVValue),这是它的主要入口点。

此方法基于InputID 将CSV 值参数存储到相关List<string>'s 中。当InputID 与名为NoOfRows 的属性相同时,它会创建一个由所有其他属性组成的List<string>。然后它会检查这个最终的List<string> 的有效性,如果一切正常,它会将结果添加到HashSet<int> 作为检查重复项的快速方法。

我已将此逻辑分解为 3 种方法,因此 DataIn 调用 StoreData,当 DataIn = NoOfRows 中的 InputID 时,它调用 MergeData,后者调用 ValidateData。

我的问题是我应该将这些方法公开以单独测试它们,还是应该将它们保密并将数据传递给 DataIn,然后对合并数据 List<string>HashSet<int> 进行断言。 DataIn 将是从类外部调用的方法,使其他方法公开仅用于单元测试。

我担心的是,如果我将其他方法公开并测试它们是否正常,那么我将无法测试 DataIn 是否按预期工作,或者如果我同时执行这两种方法,我最终会得到重复测试。

你有什么建议?

【问题讨论】:

    标签: c# .net unit-testing tdd


    【解决方案1】:

    始终坚持principle of least privilege。将私有方法公开为公开只是为了使它们可单元测试不是一个好的设计。相反,坚持只测试public interfaces。如果一个方法在不同的输入下以多种方式运行,请确保根据预期的行为编写测试,并且您应该进行简洁的设计,同时仍然经过良好的测试。

    【讨论】:

    【解决方案2】:

    关于测试私有方法的需要有两种相互竞争的思想流派 - 一种说您不应该测试它们,因为它们是一个实现细节;另一个说你应该测试它们,因为你需要测试所有东西。

    在不介入两者之间的争论的情况下,我应该提到双方都有有效的观点来支持他们的方法。但是,您绝对应该避免的一件事是将您的潜在私有方法公开,仅用于测试它们。如果您决定采用“测试私有方法”方法,则应将这些方法设为 internal,而不是 public,并让测试程序集使用 @ 查看内部方法目标程序集中的 987654321@ 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多