Вопрос

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

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

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

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

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

Q3) Это то, что технику TDD избегает? Кто-нибудь получил хорошее резюме техники TDD.

Спасибо,

- J jorgenson -

Это было полезно?

Решение

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

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

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top