refactoring - @VisibleForTesting 的替代品

标签 refactoring easymock

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

最佳答案

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

  • 将您调用它的方法拆分为多个方法,这样您就不会让一个大方法同时做一堆事情让您感觉更舒服。
  • 看看您是否可以将行为移动到处理它的外部对象。

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

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

    关于refactoring - @VisibleForTesting 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599023/

    相关文章:

    java - EasyMock "Unexpected method call"尽管有 expect 方法声明

    unit-testing - 如何使用 EasyMock 期望使用任何参数调用 void 方法

    EasyMock 测试在 Java 17 上因 java.lang.NoClassDefFoundError org.easymock.internal.ClassProxyFactory$2 失败

    javascript - 有没有更干净的方式来链接这些 Bluebird promise ?

    c# - Convert.toInt32(boolean) 是 c# 中执行此操作的唯一方法吗?

    Oracle DB (PL/SQL) 重构工具

    java - JUnit IO 测试

    c# - 如何重构我的 LinqToSql 以使其更易于维护?

    javascript - 如何简化这个 jquery 脚本?

    java - EasyMock 和参数化测试(JUnit 参数化)