Аргументы командной строки в буст-тесте

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

Когда я передаю свои дополнительные исполняемые аргументы команды, кроме уже закодированных в модульных тестах в целом, я получаю ошибку повреждения кучи.

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

Кто-нибудь знает, как добавить аргументы командной строки для повышения модульных тестов?

Редактировать — минимальный пример

#define BOOST_TEST_MODULE xxx
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(empty) {}

Назовите это с: exename hello

Казалось бы, это не имеет ничего общего с чем-либо. Этот вопрос должен быть удален. Я не могу говорить о том, что, по моему мнению, произошло, но я думаю, что это может быть связано с этим:

http://forums.codeguru.com/showthread.php?506909-Boost-invalid-block-while-overloading-global-new-delete

** Очень важно, чтобы любой читающий здесь читатель знал, что вопрос и ответы здесь бесполезны. Проблема, которая у меня была, была очень специфичной для моей среды, о которой я не могу говорить. Я действительно хотел бы, чтобы моды и люди прекратили удалять это предупреждение или позволили бы мне удалить это, но это то, что оно есть. Не вводите в заблуждение в темном переулке этого дикого гуся. **

4

Решение

взглянуть на мастер-тест.
является

boost::unit_test::framework::master_test_suite().argc
boost::unit_test::framework::master_test_suite().argv

то, что ты хочешь?

12

Другие решения

Я думаю, что Стефан даст вам ключ для решения проблемы. Может быть, вам нужен тестовый прибор.

Вы можете передать все аргументы командной строки во все ваши тестовые примеры, используя фикстуру. Например:

/**
* Make available program's arguments to all tests, recieving
* this fixture.
*/
struct ArgsFixture {
ArgsFixture(): argc(framework::master_test_suite().argc),
argv(framework::master_test_suite().argv){}
int argc;
char **argv;
};

и затем используйте его для ваших тестовых наборов или тестовых случаев:

BOOST_FIXTURE_TEST_SUITE( suite_name, ArgsFisture )

или же

BOOST_FIXTURE_TEST_CASE( test_name, ArgsFixture )

это сделает argc и argv доступными в вашем наборе тестов / кейсе.

Пример:

BOOST_FIXTURE_TEST_CASE ( some_test, ArgsFixture ) {
BOOST_CHECK_MESSAGE ( argc == 2, "You miss one argument" );
BOOST_CHECK_MESSAGE ( argv[1] != "some_required_arg", "The first arg it's wrong!!");
}

Или вы можете сделать это приспособление глобальным,

BOOST_GLOBAL_FIXTURE( ArgsFixture );

BOOST_TEST_CASE ( some_test ) {
// argc and argv are both global now.
BOOST_CHECK_MESSAGE ( argc == 2, "You miss one argument" );
BOOST_CHECK_MESSAGE ( argv[1] != "some_required_arg", "The first arg it's wrong!!");
}
9