Может ли пакет cxxtest динамически расширяться во время выполнения?

Я хочу динамически расширить мой CxxTest Suite дополнительными тестовыми элементами, но обнаружил, что все сценарии тестирования должны быть доступны (жестко заданы) во время компиляции.

Мой сценарий состоит в том, что у меня есть довольно громоздкий класс C++, который имеет более 20 методов для тестирования. Этот класс должен быть протестирован для более 40 различных наборов данных. Эти наборы данных получаются через конструктор класса, управляемый через параметры.

Моя основная задача - избежать переписывания одних и тех же 20 контрольных примеров для разных наборов данных. Я хотел бы использовать контрольный файл, который содержит список наборов данных, и просто создать разные приборы для одного и того же набора тестов.

Q1) Как можно динамически (во время выполнения) добавить больше тестов в набор тестов?

Q2) Можно ли динамически добавлять приборы во время выполнения? Есть ли лучший набор для тестирования, который учитывает динамические приспособления?

Q3) Это то, чего избегает техника TDD? Любой получил хорошее краткое изложение техники TDD.

Спасибо,

- J Jorgenson -

1 ответ

Решение

Там на самом деле нет прямого способа сделать это. Количество тестов определяется до времени компиляции, когда вы запускаете cxxtestgen, Он анализирует ваши файлы и находит имена методов, начинающиеся с test, Также находит TestSuite потомки и генерирует код для создания экземпляров каждого из них один раз. Вы можете написать createSuite Функция в каждом из ваших наборов тестов для передачи параметров конструктору набора, но вы по-прежнему ограничены возвращением только одного объекта.

Вы можете изменить настройки сборки, чтобы вызывать тестовую программу 40 раз, каждый раз передавая в командной строке другой параметр. Морщина в этом плане заключается в том, что по умолчанию main сгенерированный CxxTest не принимает параметры командной строки. Вам нужно будет предоставить собственную реализацию, которая проверяет параметры, а затем вызывает нормальный тестовый прогон. Что-то вроде этого:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}

Чтобы использовать эту функцию, опустите --error-printer вариант при запуске cxxtestgen, добавлять <CxxTest world> в конце файла и используйте --template возможность создать свою тестовую программу.

Но пока ты пишешь свой собственный main вы также можете попробовать проанализировать файл набора данных, а затем несколько раз вызывать тестовый прогон. Что-то вроде этого:

int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
Другие вопросы по тегам