测试从另一个方法调用的方法
本文关键字:方法 调用 另一个 测试 | 更新日期: 2023-09-27 18:28:42
我有一个类,它有一个名为DataIn(int InputID, string CSVValue)
的方法,这是它的主要入口点。
这种基于InputID
的方法将CSV Value参数存储到相关的List<string>'s
中。当InputID
与名为NoOfRows
的属性相同时,它将创建一个由所有其他属性组成的List<string>
。然后,它检查最终List<string>
的有效性,如果一切正常,则将结果添加到HashSet<int>
中,作为检查重复项的快速方法。
我将此逻辑分解为3个方法,因此DataIn调用StoreData,当DataIn中的InputID=NoOfRows时,它调用MergeData,MergeData调用ValidateData。
我的问题是,我应该将这些方法公开以单独测试它们,还是应该将它们保留为私有并将数据传递给DataIn和合并数据List<string>
和HashSet<int>
上的do断言。DataIn将是从类外部调用的方法,使其他方法公开只用于单元测试。
我担心的是,如果我公开其他方法并测试它们是否正常,那么我就不会像预期的那样测试DataIn,或者如果我同时这样做,我最终会得到重复的测试。
你有什么建议?
始终坚持principle of least privilege
。将私有方法公开为公共方法只是为了使它们可进行单元测试并不是一个好的设计。相反,坚持只测试public interfaces
。如果一个方法以多种方式使用不同的输入,请确保您按照预期的行为编写测试,并且您应该是一个整洁的设计,同时仍然经过良好的测试。
关于测试私有方法的必要性,有两个相互竞争的学派——一个学派认为你不应该测试它们,因为它们是一个实现细节;另一个说你应该测试它们,因为你需要测试所有的东西。
在不介入双方争论的情况下,我应该提到的是,双方都有自己的方法。然而,有一件事你绝对应该避免,那就是为了测试它们而公开你想要的私有方法。如果您决定使用"测试专用方法"方法,则应将这些方法设置为内部,而不是公共并让测试程序集在目标程序集中使用InternalsVisibleTo
属性查看内部方法。