CPPUNIT: общий базовый тест

Я хотел бы узнать эффективный дизайн или реализацию для тестирования базовых классов.
Рассмотрим пример:

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

Где Rectangle и Triangle наследуются от Polygon.

Я хотел бы, чтобы тестовые классы для Rectangle и Triangle использовали базовый тестовый класс:

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

Но я не знаю, должен ли class Test_Polygon наследовать от CppUnit::TestFixture.

Мой нынешний план: class Test_Polygon; класс Test_Rectangle: общедоступный Test_Polygon, общедоступный CppUnit :: TestFixture; класс Test_Triangle: общедоступный Test_Polygon, общедоступный CppUnit :: TestFixture;

Проблема с вышеуказанным планом заключается в том, что Test_Polygon не может использовать CPPUNIT_ASSERT, и его методы не будут перечислены в реестре CPPUNIT.

Итак, какова рекомендуемая иерархия для тестирования базовых классов и потомков с помощью CPPUNIT?

(Я использую CPPUNIT 1.12 с Visual Studio 2008 в Windows Vista.)


person Thomas Matthews    schedule 02.09.2013    source источник


Ответы (1)


Думаю, ответ зависит от того, является ли Polygon виртуальным базовым классом. Если он виртуальный, я бы рассматривал его как «частный» класс, я бы не стал его напрямую тестировать, да и Test_Polygon вообще не нужен. Модульное тестирование каждого из подклассов должно предоставлять всю информацию о том, правильно ли он работает.

Если вы тестируете метод, реализованный в базовом классе, вы можете протестировать его из любого класса, который не отменяет его. Если это метод, который вызывается из вашего подкласса, например Rectangle::SetSideLen(int len) { return Polygon::SetSideLen(len); };, тогда тестирование должно выполняться путем тестирования testRectangle.SetSideLen () в Test_Rectangle. И если у вас нет классов, которые не переопределяют его, ваш базовый класс - это, по сути, недостижимый код, который, вероятно, следует удалить.

Если вы действительно можете создать экземпляр автономного Polygon, я бы относился к нему как к «общедоступному», поэтому у меня был бы Test_Polygon, унаследованный от TestFixture, чтобы протестировать эти общедоступные методы.

person John Deters    schedule 03.09.2013