0

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

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

4

3 回答 3

3

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

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

于 2011-06-05T20:57:51.560 回答
1

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

于 2011-06-05T20:55:50.237 回答
0

斯托伊门,

我同意你的看法。

我读过很多论坛都说 PRIVET 方法不应该被测试,因为它在其他公共测试中。但主要原因是隔离并使构建块和创建隔离级别的测试变得简单。不是为你,而是为其他不同意我意见的人,这里有一个简单的例子:公共方法 BuildCar (sizeOfChassi, typeOfBody, Color) { Call private MakeChassi (sizeOfChassi) Call private MakeBody (typeOfBody) Call private Paint (Color) }在这种情况下,我不想公开 MakeChassi、MakeBody 和 Paint,因为我只是制造和销售汽车,但我想彻底测试我的工厂。如果我只使用公共方法,我将需要创建很多测试变体,当然我有忘记一些的风险。只是测试小部件(单元测​​试的主要原因),我很确定它们正在工作。

于 2014-08-16T13:19:12.227 回答