【问题标题】:CPPUNIT: common base testCPPUNIT:公共基础测试
【发布时间】:2013-09-02 18:37:45
【问题描述】:

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

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 继承。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2014-05-04
      • 2011-12-31
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多