CPPUNIT:共同基础测试

时间:2013-09-02 18:37:46

标签: c++ unit-testing visual-studio-2008 cppunit

我想知道测试基类的有效设计或实现 举个例子:

class Polygon;
class Rectangle : public Polygon;
class Triangle : public Polygon;

RectangleTriangle继承自Polygon

我希望RectangleTriangle的测试类使用基础测试类:

class Test_Rectangle : public CppUnit::TestFixture;
class Test_Triangle : public CppUnit::TestFixture;

但我不知道class Test_Polygon是否应继承CppUnit::TestFixture

我目前的计划是:     class Test_Polygon;     class Test_Rectangle:public Test_Polygon,public CppUnit :: TestFixture;     class Test_Triangle:public Test_Polygon,public CppUnit :: TestFixture;

上述计划的问题是Test_Polygon无法使用CPPUNIT_ASSERT,也不会在CPPUNIT注册表中列出其方法。

那么使用CPPUNIT测试基类和后代的建议层次结构是什么?

(我在Windows Vista上使用CPPUNIT 1.12和Visual Studio 2008。)

1 个答案:

答案 0 :(得分:1)

我认为答案取决于Polygon是否是虚拟基类。如果它是虚拟的,那么我会将它视为“私有”类,我不会直接测试它,根本不需要Test_Polygon。对每个子类进行单元测试应提供其是否正常运行的所有信息。

如果您正在测试在基类中实现的方法,则可以从任何不覆盖它的类中测试它。如果它是从您的子类中调用的方法,如Rectangle::SetSideLen(int len) { return Polygon::SetSideLen(len); };,那么测试应该通过测试Test_Rectangle中的testRectangle.SetSideLen()来完成。如果你没有不覆盖它的类,你的基类本质上是无法访问的代码,可能应该被删除。

如果你可以实际实例化一个独立的Polygon,那么我会把它视为“public”,所以我会让Test_Polygon继承TestFixture来测试那些公共方法。