关于c#:从另一个方法调用的测试方法

Testing methods called from another method

本问题已经有最佳答案,请猛点这里访问。

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

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

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

我的问题是我应该公开这些方法来单独测试它们,还是应该将它们保密,并将数据传递给DataIn,并在合并数据ListHashSet上执行断言。 DataIn将是从类外部调用的方法,使其他方法公开只用于单元测试。

我担心的是,如果我将其他方法公开并测试它们没问题,那么我就不会按预期测试DataIn的工作,或者如果我这两个方法都测试,我最终会重复测试。

你的建议是什么?


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

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


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