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

Unit testing 我应该如何使用相互调用的方法测试类?,unit-testing,testing,Unit Testing,Testing,对不起,这个模糊的,初学者的问题 假设有一个名为parent的父类,其结构类似于: public class Parent { public boolean validateOne(Request req) { ... } public boolean validateTwo(Request req) { ... } } 假设有子类,每个子类都有自己的validate方法,该方法调用父validate方法 public clas

对不起,这个模糊的,初学者的问题

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

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

}
假设有子类,每个子类都有自己的validate方法,该方法调用父validate方法

public class ChildOne {
    public boolean validate(Request req) {
        if (validate1(req)) {
            ...
        }
        ...
    }
}
public class ChildTwo {
    public boolean validate(Request req) {
        if (validate2(req)) {
            ...
        }
        ...
    }
}
现在,我想测试这组课程,但我不确定最佳实践是什么

  • 我可以测试父级的validateOne()和validateWO()方法。但我要么需要 A) 在测试子级的validate()方法时重复这些测试,使父级测试用例过时,或者B)我会忽略子级的这些测试,创建我认为不完整的测试用例。如果我在子类中省略了这些测试,那么如果将来有人重构代码并完全错过了父验证步骤,我的测试将无法捕捉到这一点

  • 我可以为子级创建测试用例,但是如果多个子级共享来自父级的相同validateX()方法,那么我将重复测试,而不是遵循干代码(干代码是否适用于单元测试?)

  • 我可以为家长创建一个测试类,并在孩子测试类中调用家长测试类,但从第三个答案中可以看出,人们似乎普遍不赞成这样做。虽然答案中提供的示例直接回答了我的问题,但如果这些类没有父子关系,我不清楚应该如何处理


  • 选项3对我来说最有意义,但有没有最好的选项?为什么?我觉得答案应该是显而易见的,因为这是一种常见的情况,不仅仅是在家长/孩子的课堂上,而且我从来没有被明确地教过什么是最好的

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

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