Тесты TEST_P в библиотеке не запускаются, когда INSTANTIATE_TEST_CASE_P вызывается в отдельном исполняемом файле

Для меня это была строка: fastcgi_pass unix: /var/run/php5-fpm.sock;

, который должен был быть просто: fastcgi_pass unix: /run/php5-fpm.sock;

2
задан Zark Bardoo 5 March 2019 в 01:33
поделиться

1 ответ

TEST_P - это макрос, который при раскрытии объявляет полный класс c ++, к которому INSTANTIATE_TEST_CASE_P добавляет функциональность.

Поскольку ваш TEST_P находится в отдельном файле .cc, ваш вызов INSTANTIATE_TEST_CASE_P (который находится в своем собственном файле .cc) не может его увидеть, поэтому он по сути определяет функцию без класса-владельца.

С другой стороны, класс, определенный в TEST_P, не оснащен методами, которые INSTANTIATE_TEST_CASE_P определил бы для него. Так что он не находит никаких тестовых экземпляров для запуска.

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

Однако, предостережение - TEST_P не только объявляет класс, но и определяет несколько функций. Поэтому, если вы попытаетесь поместить его в файл заголовка, вы можете получить некоторые ошибки компоновщика, относящиеся к этим методам класса (как уже определено, например). Так что лучшее место для этого может быть рядом с вызовом INSTANTIATE_TEST_CASE_P.

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

0
ответ дан qdin 5 March 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: