Я хочу обработать дополнительные аргументы командной строки для моего буст-теста. Я использую его для автоматического тестирования функции, и мне нужно указать такие вещи, как имя сервера, имя пользователя, пароль и т. Д.
Когда я передаю свои дополнительные исполняемые аргументы команды, кроме уже закодированных в модульных тестах в целом, я получаю ошибку повреждения кучи.
Я искал влево и вправо, и было достаточно сложно просто найти, где получить доступ к этим аргументам. Теперь, похоже, мне, возможно, нужно сначала их настроить, иначе анализатор командной строки сделает что-то глупое.
Кто-нибудь знает, как добавить аргументы командной строки для повышения модульных тестов?
Редактировать — минимальный пример
#define BOOST_TEST_MODULE xxx
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(empty) {}
Назовите это с: exename hello
Казалось бы, это не имеет ничего общего с чем-либо. Этот вопрос должен быть удален. Я не могу говорить о том, что, по моему мнению, произошло, но я думаю, что это может быть связано с этим:
** Очень важно, чтобы любой читающий здесь читатель знал, что вопрос и ответы здесь бесполезны. Проблема, которая у меня была, была очень специфичной для моей среды, о которой я не могу говорить. Я действительно хотел бы, чтобы моды и люди прекратили удалять это предупреждение или позволили бы мне удалить это, но это то, что оно есть. Не вводите в заблуждение в темном переулке этого дикого гуся. **
взглянуть на мастер-тест.
является
boost::unit_test::framework::master_test_suite().argc
boost::unit_test::framework::master_test_suite().argv
то, что ты хочешь?
Я думаю, что Стефан даст вам ключ для решения проблемы. Может быть, вам нужен тестовый прибор.
Вы можете передать все аргументы командной строки во все ваши тестовые примеры, используя фикстуру. Например:
/**
* 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!!");
}