0

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

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

从哪里Rectangle继承。TrianglePolygon

我想拥有测试类RectangleTriangle使用基础测试类:

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

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

我目前的计划是:类Test_Polygon;类Test_Rectangle:公共Test_Polygon,公共CppUnit::TestFixture;类Test_Triangle:公共Test_Polygon,公共CppUnit::TestFixture;

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

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

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

4

1 回答 1

1

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

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

如果您实际上可以实例化一个独立的多边形,那么我会将它视为“公共”,因此我将让 Test_Polygon 从 TestFixture 继承以测试这些公共方法。

于 2013-09-03T04:37:37.410 回答