@VisibleForTesting的替代品

Thi*_*ago 22 refactoring easymock

我知道@VisibleForTesting是不可取的,因为它只是为了测试目的而改变了类的接口.理想情况下,我们应该测试我们实际使用的接口.但什么是一个好的选择?

Fed*_*les 38

@VisibleForTesting正如您所说,您使用的时候想要测试一部分您未向最终用户公开的代码.如果你想测试它,那很可能意味着它很复杂,或者至少不是微不足道的.两种解决方案是:

  1. 将您调用此方法的方法拆分为多种方法,这样您就不会有一个大方法同时处理大量内容.
  2. 查看是否可以将行为移动到处理它的外部对象.

当东西开始变得复杂时,我非常喜欢#2,因为我可以有一个外部对象,我可以测试并确保它可以工作,而不必通过我们的界面公开它.

话虽如此,有时行为并不能保证将方法提取到新对象中,而@VisibleForTesting只是为了节省时间.经验是什么告诉你何时值得这样做(或不是).

  • +1用于移动到外部对象.这是一个双赢的情况,编写好的测试实际上改进了您正在测试的代码. (12认同)