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

问题描述 投票:1回答:1

对不起,初学者的问题。

比方说,有一个名为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)) {
            ...
        }
        ...
    }
}

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

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

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

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

选项3对我来说最有意义,但是有没有最佳选择,为什么?我觉得答案应该很明显,因为这是常见的情况,不仅是在父/子类中,而且从来没有明确地告诉我什么是最好的。

unit-testing testing
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.