2016-06-29 2 views
1

Я получаю эту ошибку в C++ файл, где я пишу несколько тестов:Поймать тест рамки вопрос: не может использовать Поймать :: Session()

error: no member named 'Session' in namespace 'Catch' 
     testResult = Catch::Session().run(test_argc, test_argv); 
        ~~~~~~~^ 

Глядя на catch.hpp один файл заголовка, я заметил что код, который должен реализовывать функцию-член Session(), выделен серым цветом, вероятно, из-за того, что где-то где-то #ifdef, которого я не могу найти.

Есть ли какой-либо макрос для установки класса Session?

Варианты вылова: 1.5.3 и 1.5.6.

Ссылка: https://github.com/philsquared/Catch/blob/master/docs/own-main.md

+2

обязательная проверка работоспособности: вы * указываете 'CATCH_CONFIG_RUNNER' перед тем, как вы включите' catch'.hpp, правильно? – jaggedSpire

+0

@jaggedSpire - Да, только один раз, в файле, где я определяю main(), который не является тем, где я пишу тесты. – Pietro

+0

и ошибка компиляции находится в файле, где вы определяете main(), правильно? – jaggedSpire

ответ

1

Вы пытаетесь вызвать конструктор Catch::Session из файла, в котором вы не определяете свои main выполнить. Согласно documentation on defining your own main, там должен быть только один экземпляром Catch::Session:

Catch::Session session; // There must be exactly once instance 

Это скорее всего Поймайте препятствует строительству в Catch::Session Переводных единиц, где он не может быть использован в определении пользовательских main (так как именно там он должен использоваться), чтобы точно не допустить ошибку, которую вы сделали при компиляции.

+0

, и что, если я хочу запускать тесты несколько раз за одно приложение, с разными argc, как это сделать, не используя только один экземпляр, который, кажется, содержит аргументы. –

+0

звучит как новый материал вопроса для меня. – jaggedSpire

Смежные вопросы