抱歉,这个模糊的初学者问题。
假设有一个名为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)) {
...
}
...
}
}
现在,我想测试这组课程,但是我不确定最佳实践是什么。
我可以测试Parent的validateOne()和validateTwo()方法。但是我要么需要 A)在测试使子级测试用例过时的孩子的validate()方法时重复这些测试,或者B)我将为孩子省略这些测试,造成我认为是不完整的测试用例。而且,如果我在子类中省略了这些测试,那么将来如果有人重构代码并完全错过了此父验证步骤,那么我的测试将无法捕获。
我可以为子代创建测试用例,但是如果多个子代从父代共享相同的validateX()方法,那么我将重复测试并且不遵循DRY代码(DRY代码甚至适用于单元)测试?)
我可以为父级创建一个测试类,并在子级测试类中调用父级测试类,但是好像人们普遍不赞成这种情况,如第三个答案here所示。并且尽管该答案中提供的示例直接回答了我的问题,但是尚不清楚如果这些类没有父子关系,我应该如何继续。
选项3对我来说最有意义,但是有没有最佳选择,为什么?我觉得答案应该很明显,因为这是常见的情况,不仅是在父/子类中,而且从来没有明确地告诉我什么是最好的。
答案 0 :(得分:0)
似乎最好的办法是模拟父方法的行为(如果该方法对子方法的输出有重大影响)或检查是否调用了父方法并从那里继续。