Параметры командной строки UnitTest++
Я хочу использовать аргумент командной строки в одном из моих тестов. Я не смог найти ни одного примера в Интернете.
TEST(SomeTest)
{
std::string file("this is some command line argument");
CHECK(something);
}
int main(int argc, char** argv)
{
return UnitTest::RunAllTests();
}
Есть идеи?
2 ответа
Ответ
Нет реальной причины для непосредственного тестирования аргументов командной строки. Вместо этого напишите свои модульные тесты, чтобы проверить поведение вашего кода (функций и классов) с различными аргументами. Как только вы убедитесь, что ваш код работает правильно в модульном тесте, просто подключите его к main
и там должно работать правильно.
осветление
Представьте, что у вас есть юнит-тест на аргумент std::string
конструктор.
TEST(SomeTest)
{
std::string file("this is some command line argument");
CHECK(something);
}
Затем вы подключаете его в main
,
int main(int argc, char** argv)
{
std::string file(argv[1]);
// do stuff....
return 0;
}
Поскольку с аргументом командной строки ничего не должно случиться, прежде чем он будет передан конструктору, вы уже эффективно проверили его. Если, с другой стороны, ваш main
это беспорядок, я бы предложил рефакторинг в первую очередь.
Я думаю, что вы ищете, это возможность указать "вход теста", не делая новый тест для каждого.
Скажем, у вас есть 3 набора тестовых данных, на которых вы хотите выполнить свою тестовую процедуру. Ты просто хочешь бежать
./unittest_build SomeTest file1
./unittest_build SomeTest file2
./unittest_build SomeTest file3
не запуская тесты в тестовую сборку.
Но вы можете просто сделать это:
void runCheck(const std::string& filename) {
std::string file(filename);
// well, you're gonna do stuff here
CHECK(something);
}
TEST(SomeTest)
{
runCheck(std::string("your first testing datafile"));
runCheck(std::string("your second testing datafile"));
runCheck(std::string("your third testing datafile"));
// this is what your test is. It tests these files.
}
int main(int argc, char** argv)
{
return UnitTest::RunAllTests();
}
Параметризация теста означает, что тест уже не просто тест. Теперь это функция, а не юнит-тест.