如何重构一个循环,使每个循环都有一个单元测试?

本文关键字:循环 有一个 单元测试 一个 何重构 重构 | 更新日期: 2023-09-27 17:54:59

假设我有一个类,它有一个私有void方法。我想为每个特定的迭代使用一些种子参数来测试这个方法。

例如,我想让下面的startthroughgridcells方法可以测试它的迭代,这样我就可以检查parameterObject中的状态变化。

在这种情况下,我如何在一个内部有循环的私有方法中使每个迭代可测试?

public class Traveller
{
// ... Some memebers, properties
private void StartTrhoughGridCells(object parameterObject)
{
   // Do some state changes on parameterObject
}
}

如何重构一个循环,使每个循环都有一个单元测试?

单元测试是黑盒测试,所以从概念上讲,测试特定的私有方法本身不应该是一个目标。单元测试不关心私有方法,也不知道它们的存在。现在,当涉及到代码覆盖率时,您可能希望覆盖所有代码,但这并不完全相同…

在编写单元测试时,您只关心可观察效果。假定startthroughgridcells方法的存在是为了产生某种可观察的效果,因此您需要对此进行测试。然而,从这个问题中,我不能说出可观察到的效果是什么,所以你必须自己弄清楚。

换句话说,你需要通过你拥有的任何公共API来访问这个方法。如果这很难做到,这表明您的API粒度太粗。在这种情况下,请考虑是否某些私有方法不能重构为可组合策略或类似的策略。

如果您的问题是方法是私有的

这是一个建议的解决方法

在if DEBUG

中添加公共方法
#id DEBUG
public void StartTrhoughGridCells_ForTestOnly(object parameterObject) // Workaround
{
   StartTrhoughGridCells(parameterObject)
}
#endif

这样在版本中就不存在了假设您的测试在调试版本上运行-它们可以测试此方法

相关文章: