测试使用不同参数类型调用相同 class 的类似方法的方法的最佳实践是什么?

What are best practices for testing methods which call similar method of same class with different parameter types?

测试方法的最佳实践是什么,该方法调用具有不同参数类型的相同 class 的类似方法?

是否应该模拟一个实例?等等

你有当前的示例或解决方案吗?

我对案例的最佳实践感兴趣,当测试的方法更多时, 超过 1 行并复制测试代码以测试 class 是有问题的。

class A {
  Map z = //...
  public void put(String x, Y y) {
    z.put(x, y);
  }
  public void put(String x, String y) {
    put(x, Y.parse(y));
  }
}

合理的做法:

  • first focus 你对 really 做的那个方法的测试 "do the work" (在你的例子中,那将是第一个版本)。您想了解该方法的public 契约 并深入测试
  • 然后,然后查看那些 other 方法,这些方法只是 "wrap" 围绕已经经过良好测试的方法。

对于后面的方法,您只是想测试这个方法在做什么。在您的示例中,这意味着:您确保传入的字符串进入 Y.parse().

我会认为 不好 实践来测试你的第二种方法与你应该应用于第一种方法相同的审查。

您的测试应该关注方法所负责的 "work"。在您的示例中,第一种方法负责某些 "real business stuff";而第二种方法(表面上)只负责转换一个参数并调用另一个方法。

意思是:当你对第一个方法 put(String, Y) 进行了 5 次测试(测试该方法中的所有不同路径)时 - 你可能只需要对方法 put(String, String) 进行一次测试(它只是检查由于 put(String, String) 正在做的事情,put(String, Y) 中的一些预期路径被采用)。

长话短说:

  • 当方法执行时 "real business" - 测试 "real business"
  • 当该方法仅涉及 plumbing/gluing 事物时 - 然后专注于该方面 - 而不是重新测试获得 "wrapped around"
  • 的事物