Указание тестовых зависимостей в CppUnit? - PullRequest
4 голосов
/ 19 июня 2010

Я бы хотел указать порядок тестирования в CppUnit. Согласно моим исследованиям, порядок тестирования зависит от компилятора или компоновщика и от того, как они попали на файлы.

Как указать зависимости в CppUnit?

Например, давайте рассмотрим класс прямоугольника с четырьмя строками. Каждая строка содержит два точечных класса. Предположим, что каждый класс находится в отдельном модуле или единице перевода.

struct Point
{
  int x;
  int y;
};

struct Line
{
  Point a;
  Point b;
};

struct Rectangle
{
  Line top;
  Line left;
  Line right;
  Line bottom;
};

В приведенном выше коде сначала должен быть проверен класс Point, затем класс Line и, наконец, класс Rectangle. Нет причин проверять класс Rectangle, если у классов Line или Point есть проблемы. Это очень упрощенный пример.

Для составных классов сначала должны быть проверены внутренние классы или классы типов данных-членов.

Предположим, что у каждого класса есть связанный класс тестирования. Каждый тестовый класс имеет свои собственные опубликованные тестовые методы (которые зарегистрированы в списке CppUnit) в отдельных файлах. Класс для тестирования Линий не знает класс тестирования для очков; и похоже на прямоугольник. Когда эти классы тестовых примеров компилируются, их порядок зависит от компилятора и компоновщика.

Итак, как можно упорядочить контрольные примеры?

К вашему сведению, я использую CppUnit, wxTestRunner и Visual Studio 2008

1 Ответ

5 голосов
/ 19 июня 2010

То, что вы пытаетесь сделать, на самом деле не является модульным тестированием. «Чистое» юнит-тестирование предназначено для тестирования отдельных юнитов (отдельных классов) с использованием макетов или фальшивых объектов вместо реальных зависимостей; как только вы проверяете зависимости классов друг от друга, это интеграционное тестирование, а не модульное тестирование.

С этим отказом от ответственности ...

Похоже, что вы могли бы использовать CPPUNIT_TEST_SUITE_NAMED_REGISTRATION для создания нескольких наборов, а затем запускать каждый набор по порядку, только если все предыдущие наборы пройдены, но вам, возможно, придется взломать или заменить тестер wxTestRunner. сделать это.

Страница CppUnit на Создание TestSuite имеет другие опции для регистрации тестовых наборов; CPPUNIT_REGISTRY_ADD , например, позволяет создать иерархию пакетов, которая должна дать вам некоторый контроль над порядком, но я не вижу способа сбоя в одном наборе прервать последующие тесты.

Наконец, как совет, CppUnit, вероятно, не самая лучшая среда модульного тестирования C ++ в наши дни. Я лично фанат Google Test , но Boost.Test и UnitTest ++ тоже хороши. ( Этот ответ представляет личный проект под названием Saru, который, возможно, даст вам гибкость, необходимую для заказа тестов.)

...