我应该如何使用相互调用的方法测试类?



很抱歉这个问题含糊不清,初学者。

假设有一个名为 Parent 的父类,其结构类似于:

public class Parent {
public boolean validateOne(Request req) {
...
}
public boolean validateTwo(Request req) {
...
}
}

假设有子类,每个子类都有自己的验证方法,该方法调用父验证方法。

public class ChildOne {
public boolean validate(Request req) {
if (validate1(req)) {
...
}
...
}
}
public class ChildTwo {
public boolean validate(Request req) {
if (validate2(req)) {
...
}
...
}
}

现在,我想测试这组类,但我不确定最佳实践是什么。

  1. 我可以测试父的validateOne((和validateTwo((方法。但我要么需要 A( 在测试孩子的 validate(( 方法时重复这些测试,使父测试用例过时或 B( 我会省略孩子的这些测试,创建我认为不完整的测试用例。如果我在子类中省略这些测试,那么如果将来有人重构代码并完全错过了这个父验证步骤,我的测试将无法捕获它。

  2. 我可以只为子项创建测试用例,但是如果多个子项与父项共享相同的 validateX(( 方法,那么我将重复测试而不遵循 DRY 代码(DRY 代码甚至适用于单元测试吗?

  3. 我可以为父类创建一个测试类,
  4. 并在子测试类中调用父测试类,但看起来人们通常不赞成这一点,如这里的第三个答案所示。尽管该答案中提供的示例直接回答了我的问题,但不清楚如果类没有父子关系,我应该如何进行。

选项 3 对我来说最有意义,但有没有最好的选择,为什么?我觉得答案应该是显而易见的,因为这是一个常见的情况,不仅仅是父母/子类,而且我从来没有被明确教导过什么是最好的。

似乎最好的办法是模拟父方法的行为(如果该方法对子方法的输出产生重大影响(,或者检查是否调用了父方法并从那里继续。

最新更新