【问题标题】:Alternatives to @VisibleForTesting@VisibleForTesting 的替代品
【发布时间】:2012-01-25 19:23:45
【问题描述】:

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

【问题讨论】:

  • 欢迎将代码发布到CodeReview.SE
  • 我的真正意思是一个一般性问题,而不是需要重构的特定代码。

标签: refactoring easymock


【解决方案1】:

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

  1. 将您调用它的方法拆分为多个方法,这样您就不会因为没有一个大方法同时处理一堆事情而感到更自在。
  2. 看看您是否可以将行为移至处理该行为的外部对象。

当事情开始变得复杂时,我非常喜欢 #2,因为我可以拥有一个外部对象,我可以测试并确保它可以正常工作,而无需通过我们的界面公开它。

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

【讨论】:

  • +1 用于移动到外部对象。这是编写好的测试实际上可以改进您正在测试的代码的双赢情况之一。
  • 此答案未解决您必须向类添加其他修饰符方法以使其可配置以进行测试的情况。当您的生产代码使用@Autowired 连接依赖项时,这尤其与依赖注入一起发生,因为测试代码需要在相应单元测试的每个测试方法中分别设置它们以测试不同的场景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2015-08-05
  • 2011-01-01
  • 2011-10-24
  • 2011-05-31
  • 2023-03-21
相关资源
最近更新 更多