单元测试类层次结构的常用/广泛接受的惯例是什么?
我试图寻找与此问题相关的不同问题,但找不到全面的问题。
我们假设正在测试一个层次结构。
class Base
{
int base_internal() { return 10;}
public:
int virtual do_f() { return 0; }
int execute() {
return do_f()*base_internal();
}
};
class DerrivedA : public Base
{
int a_specefic() { return 4; }
public:
int virtual do_f() { return a_specefic(); }
};
class DerrivedB : public Base
{
int b_specefic() { return 8; }
public:
int virtual do_f() { return b_specefic(); }
};
现在用于单元测试基础结构,我在这里考虑两种策略。
策略1。每种类型都有“测试人员”类,从相应的类派生并进行测试
class TestForBase : public Base {...};
class TestForDerrivedA : public DerrivedA {...};
class TestForDerrivedB : public DerrivedB {....};
策略2 。使用访问者设计模式的“认证”版本(将具有单个TestVisitor),而不是使用accept()方法修改每个被测类,并在visit()内部进行测试)的测试人员课程
class Base
{
void accept(Tester& t);
int base_internal();
public:
int virtual do_f();
int execute();
};
class Derrived : public Base
{
void accept(Tester& t);
int a_specefic();
public:
int virtual do_f();
};
struct Tester
{
void visit(Base* b) { ... };
void visit(Derrived* d) { ... } ;
};
还有哪些其他选择?