首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重构一个循环,使其在每次迭代时都有一个单元测试?

如何重构一个循环,使其在每次迭代时都有一个单元测试?
EN

Stack Overflow用户
提问于 2011-05-06 18:59:26
回答 2查看 177关注 0票数 1

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

例如,我想让下面的StartTrhoughGridCells方法对于它的迭代是可测试的,这样我就可以检查parameterObject中的状态更改。

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

代码语言:javascript
复制
public class Traveller
{

// ... Some memebers, properties

private void StartTrhoughGridCells(object parameterObject)
{
   // Do some state changes on parameterObject
}

}
EN

回答 2

Stack Overflow用户

发布于 2011-05-06 19:58:24

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2021-06-21 22:09:44

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

以下是建议的解决方法

如果调试,则在内部添加公共方法

代码语言:javascript
复制
#id DEBUG
public void StartTrhoughGridCells_ForTestOnly(object parameterObject) // Workaround
{
   StartTrhoughGridCells(parameterObject)
}
#endif

这样,假设您的测试运行在Debug版本上,那么它在发行版中就不存在了--他们可以测试这个方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5910391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档