假设我有一个类,它有一个私有的void方法。我想通过每个特定迭代的一些种子参数来测试这个方法。
例如,我想让下面的StartTrhoughGridCells方法对于它的迭代是可测试的,这样我就可以检查parameterObject中的状态更改。
在这种情况下,我如何在内部有循环的私有方法中使each迭代可测试?
public class Traveller
{
// ... Some memebers, properties
private void StartTrhoughGridCells(object parameterObject)
{
// Do some state changes on parameterObject
}
}发布于 2011-05-06 19:58:24
单元测试是黑盒测试,因此从概念上讲,测试特定的私有方法本身不应该是一个目标。单元测试不关心私有方法,也不知道它们的存在。现在,当涉及到代码覆盖率时,您可能希望命中所有代码,但这并不完全相同……
在编写单元测试时,您只关心可观察效果。假设StartTrhoughGridCells方法的存在是为了产生某种可观察到的效果,所以您需要对其进行测试。然而,从这个问题我不能说出什么是可观察到的影响,所以你必须自己弄清楚。
换句话说,您需要通过您拥有的任何公共API来访问该方法。如果这太难做到,那就说明你的API太粗粒度了。在这种情况下,考虑一些私有方法是否不能重构为可组合策略或类似方法。
发布于 2021-06-21 22:09:44
如果您的问题是该方法是私有的
以下是建议的解决方法
如果调试,则在内部添加公共方法
#id DEBUG
public void StartTrhoughGridCells_ForTestOnly(object parameterObject) // Workaround
{
StartTrhoughGridCells(parameterObject)
}
#endif这样,假设您的测试运行在Debug版本上,那么它在发行版中就不存在了--他们可以测试这个方法
https://stackoverflow.com/questions/5910391
复制相似问题