На самом деле нет прямого способа сделать это. Количество тестов определяется до времени компиляции, когда вы запускаете 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;
}