2016-09-16 61 views
1

我正在开发包含junit测试代码的项目。在某些地方,我已经看到该方法被声明为默认(无访问说明符),并且他们正在使用它在junit中进行代码覆盖。任何人都可以知道哪一个是从以下选项单元测试代码的最佳方法。增加仅适用于junit的方法范围建议与否?

  1. 使方法为默认(无访问符)。因为对于junit我们暴露了课堂以外的方法。最终我们是 暴露它只为junit。
  2. 我们可以使用反射来测试这段代码。因为junit不会在生产环境中交付。
+1

为什么你需要测试私有方法? –

+0

你有没有试过PowerMockito? – Celt

+0

相关:http://stackoverflow.com/questions/6913325/annotation-to-make-a-private-method-public-only-for-test-classes –

回答

1

从本质上说,这是风格问题;因此它比真正的技术原因更关注意见。我的“技术”的想法在这里:

  • 我们偶尔这样做 - 有时我们添加干将对我们的生产代码,允许内部状态的检查。仅仅因为这是一种简单直接的检索信息的方式。
  • 有了这些吸气器,我可以触发一个操作;然后对内部状态做出某种断言。
  • 另一种方法是在我们的测试用例中使用诸如反射等疯狂的东西。

事情是这样的:我们有一个惯例,把一个简单的javadoc放在这样的包保护方法之上,就像/ **单元测试* /。而且我们在我们的团队中同意这对我们来说“够好”。但当然:在一定程度上,这是不是一个很好的模式:当你做一些东西内部可以从以外观察;所以你以某种方式将实现细节的某些部分外部化。

换句话说:在这里不要过分。将内部事物看作是实现的核心(也许工作在非常高的抽象层次上)是公平的;但你不想让“外太多”的东西可见。人们可能会错误地认为这些东西属于你班级的“官方合同”!

但正如其他人所说,你可能想要看看Mockito可以替你做些什么。