visualstudio-单元测试C#中的链式私有方法

本文关键字:有方法 单元测试 visualstudio- | 更新日期: 2023-09-27 17:58:23

我的问题是我的类中有一个公共方法,它正在调用一个私有方法。私有方法正在调用另一个私有方法,依此类推,有4个链接的私有方法。我知道我应该只为公共方法编写单元测试。在我的情况下,我将拥有完整的代码覆盖范围,因为所有私有方法都是从公共方法调用的。但万一出了问题,我的单元测试就不知道到底是哪种方法搞砸了。我知道我应该尝试在不同的类中移动一些方法,这样我就可以测试它们,但这意味着我应该创建4个不同的类,每个类中只有一个方法。

那么,有没有一种方法可以测试这些私有方法中的每一个,或者我应该使用Visual Studio中的集成功能来测试私有方法?

visualstudio-单元测试C#中的链式私有方法

已经通过调用公共方法来测试私有方法。您测试公共方法的输入和输出,该方法依赖于私有方法,因此所有方法都在测试中。发生的任何问题都将导致一个异常,该异常(在检查堆栈跟踪时)将通知您是哪种方法(私有或其他方法)导致了问题。

私人成员就是这样,私人。它们不应该暴露在外部,因为它们只关心对象的内部工作,因此单元测试应该(也只能)测试公共的,这就是你已经在做的。

您应该集中精力测试可观察的行为,这意味着测试调用公共方法的预期结果。如果私有方法正在执行大量工作,则考虑将它们移动到注入测试对象的对象中,如果没有,则如果出现问题,则调试应该不会太困难:)

Stoimen,

我同意你的看法。

我读过很多论坛说PRIVET方法不应该被测试,因为它在其他公共测试中。但主要的原因是隔离,使构建块和创建隔离级别的测试变得简单。不是为了你,而是为了其他不同意我观点的人,这里有一个简单的例子:公共方法BuildCar(sizeOfChassi,typeOfBody,Color){呼叫私人MakeChassi(sizeOfChassi)调用私有MakeBody(typeOfBody)调用私有Paint(Color)}在这种情况下,我不想成为大众MakeChassi、MakeBody和Paint,因为我只是制造和销售汽车,但我想彻底测试我的工厂。如果我只是使用公共方法,我将需要创建许多测试变体,当然我有忘记一些的风险。只是测试小部件(UNIT TESTs的主要原因),我很确定它们是否有效。另一件事是,在类中,我可以创建另一个公共方法来使用这些私有方法,而无需重新编写测试变体。