从另一种方法调用的测试方法

时间:2012-03-21 09:17:35

标签: c# .net unit-testing tdd

我有一个名为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的工作,或者如果我同时测试它们,我最终会重复测试。

你有什么建议?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

关于测试私有方法的必要性有两种竞争学派 - 一种认为你不应该测试它们,因为它们是一个实现细节;另一个说你应该测试它们,因为你需要测试一切。

如果没有介入两者之间的争论,我应该提到双方都有正确的观点。但是,你应该避免的一件事就是将你想要的私有方法公开,仅用于测试它们。如果您决定使用“测试私有方法”方法,则应将这些方法设置为 internal ,而不是 public ,并让测试程序集使用{查看内部方法目标程序集中的{3}}属性。