我知道@VisibleForTesting是不可取的,因为它只是出于测试目的而改变了类的接口。理想情况下,我们应该测试我们实际使用的接口。但是什么是一个好的选择呢?
答案 0 :(得分:38)
如果您正如您所说,您想要测试一部分您未向最终用户公开的代码,则使用@VisibleForTesting
。如果你想测试它,那很可能意味着它很复杂,或者至少不是微不足道的。两种解决方案是:
当东西开始变得复杂时,我非常喜欢#2,因为我可以有一个外部对象,我可以测试并确保它可以工作,而不必通过我们的界面公开它。
话虽如此,有时行为并不能保证将方法提取到新对象中,而只使用@VisibleForTesting
来节省时间。经验就是告诉你什么时候这样做是值得的。