首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >改变私有方法作为保护或包私有为单元测试-好还是坏?

改变私有方法作为保护或包私有为单元测试-好还是坏?
EN

Stack Overflow用户
提问于 2016-11-14 05:13:43
回答 2查看 1.3K关注 0票数 3

我正在研究TDD,最近我在寻找如何正确地测试私有方法。“堆栈溢出”中的流行答案表明:

  • 使用反射使私有方法可从外部访问。1
  • 不要测试私有方法。(使用公共方法。) 1 2 3.

根据评论部分的不同意见,似乎每个人都有自己的规则。然后,我发现这个教程网站提出了一种相当大胆的方法。

  • 使private方法protectedpackage private。将测试代码放在同一个包中。为可测试性设计意味着设计您的代码,这样它就更容易测试。要做到这一点,你可能必须打破我们在大学里学到的一些原则,比如封装。

尽管TDD的原则是为可测试性设计代码,但破坏封装对我来说并不合适。这种方法是一个很好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-14 20:21:32

我认为正确的答案是:不要测试私有方法。如果您觉得需要测试私有方法,那么可能会发生以下两种情况之一:

  • 方法不一定是私有的:也许可以通过它所在的对象的API来访问该方法。在这种情况下,将其更改为公共(或其他任何非私有的)。另一种选择是将该方法的行为放入另一个对象的公共方法中,并为其构建一些专用测试;
  • 方法必须是私有的,所以您正在测试一些不应该测试的东西。您正在尝试编写与您正在测试的对象太耦合的测试。私有方法从定义上说是不稳定的,它们可以在一段时间内频繁变化。这些更改将破坏直接验证私有方法的每个测试。
票数 3
EN

Stack Overflow用户

发布于 2016-11-14 06:35:28

如果您可以将Guava库添加为依赖项,则可以将方法package private并使用VisibleForTesting注释标记它。

我假设您使用的是Java,尽管您没有明确说明这一点。

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

https://stackoverflow.com/questions/40582252

复制
相关文章

相似问题

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