Я работаю с Visual Studio 2022, C++ и хочу использовать платформу Google Test через обозреватель тестов. Тесты создаются и могут выполняться, но обозреватель тестов не может найти ни один из моих тестов.
Я регулярно использую обозреватель тестов в проектах C# и тестовую среду NUnit без проблем.
Прежде чем кто-то сделает замечание и укажет на другой вопрос, я проверил практически идентичный запрос Visual Studio 2019 Test Explorer не нашел тестов Google C++, но не могу использовать принятый ответ (более подробную информацию см. ниже). Я также проверил несколько других запросов.
Это то, что я сделал, шаг за шагом.
Ниже приведены подробности для платформы x64. Результаты для x86 идентичны.
Я создал тестовый проект MyTest, используя шаблон Google Test. Содержимое test.cpp следующее: (в соответствии с примером, который я нашел в Интернете.)
#include "pch.h"
static long long Factorial(int n)
{
if (n < 0) return 0L;
switch (n)
{
case 0: return 1L;
case 1: return 1L;
default: return Factorial(n - 1) + Factorial(n - 2); // actually this is Fibonacci, not Factorial.
}
}
// Tests factorial less than 0.
TEST(FactorialTest, HandlesNegativeInputTest)
{
EXPECT_EQ(Factorial(-2), 0);
EXPECT_EQ(Factorial(-1), 0);
}
// Tests factorial of 0.
TEST(FactorialTest, HandlesZeroInputTest)
{
EXPECT_EQ(Factorial(0), 1);
}
// Tests factorial of positive numbers.
TEST(FactorialTest, HandlesPositiveInputTest)
{
EXPECT_EQ(Factorial(1), 1);
EXPECT_EQ(Factorial(2), 2);
EXPECT_EQ(Factorial(3), 3);
EXPECT_EQ(Factorial(8), 34);
}
Примечание. Код изменен после предложений 3CxEZiVlQ, см. примечания ниже.
Проект «MyTest» помечен как проект по умолчанию для F5.
Проект собирается и запускается без проблем. Из консоли:
...\sources\x64\Debug>MyTest.exe --gtest_list_tests
Running main() from D:\a\_work\1\s\ThirdParty\googletest\googletest\src\gtest_main.cc
FactorialTest.
HandlesNegativeInput
HandlesZeroInput
HandlesPositiveInput
И от использования F5:
Running main() from D:\a\_work\1\s\ThirdParty\googletest\googletest\src\gtest_main.cc
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN ] FactorialTest.HandlesNegativeInput
[ OK ] FactorialTest.HandlesNegativeInput (0 ms)
[ RUN ] FactorialTest.HandlesZeroInput
[ OK ] FactorialTest.HandlesZeroInput (0 ms)
[ RUN ] FactorialTest.HandlesPositiveInput
[ OK ] FactorialTest.HandlesPositiveInput (0 ms)
[----------] 3 tests from FactorialTest (3 ms total)
[----------] Global test environment tear-down
[==========] 3 tests from 1 test case ran. (6 ms total)
[ PASSED ] 3 tests.
...\sources\x64\Debug\MyTest.exe (process 11176) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
Но использование кнопки «Выполнить все тесты» в обозревателе тестов не дает никакого результата, тесты не идентифицируются, о проблемах не сообщается. Нажатие кнопки «Выполнить все тесты»:
Build started at 14:57...
1>------ Build started: Project: MyTest, Configuration: Debug x64 ------
1>pch.cpp
1>test.cpp
1>MyTest.vcxproj -> ...\sources\x64\Debug\MyTest.exe
1>Done building project "MyTest.vcxproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 14:57 and took 06,082 seconds ==========
Я проверил идентичный запрос Visual Studio 2019 Test Explorer не нашел тесты Google на C++ Принятый ответ — использование файлов CMake и некоторых довольно конкретных (и для меня неясных) деталей. Я не знаю, как работать с CMake, и предпочел бы не использовать его для этого конкретного проекта, его использование было бы для меня «одним из». Нет (для меня) никаких указаний на то, что CMake абсолютно необходим для решения этой проблемы.
Последовало замечание к исходному вопросу об использовании main(...). Обеспечение реализации main(...) не имеет никакого значения.
Я посетил следующий сайт для получения дополнительной информации
Отмечено Инструменты->Параметры->Тестовый адаптер для Google Test->Печать отладочной информации = true. Это не дает другого результата и не генерирует никакой новой информации.
проверил ручной запуск. Может создавать и запускать тесты в командной строке (в том числе с опцией --gtest_list_tests). Результаты, как и ожидалось.
Проверка раздела «Устранение неполадок» из https://github.com/Microsoft/TestAdapterForGoogleTest?tab=readme-ov-file
Я застрял, есть ли у кого-нибудь совет, как сделать тесты видимыми в обозревателе тестов?
@3CxEZiVIQ: согласно учебнику GoogleTest имена легко спутать, поэтому я в этом отношении немного осторожен. Все имена, которые я использую, независимо от того, что это такое и связано с тестированием, заканчиваются на Test, проект называется MyTest, основной исходный файл — test.cpp, тестовая группа называется FactorialTest (код заимствован из руководства по GoogleTest). Я думаю, что я не выполнил требование использовать Test в конце (некоторых) имен. Я не уверен, как обозреватель тестов обрабатывает все элементы, и именно в этом проблема (я думаю).
TEST(GROUP, HandlesNegativeInput)
- направляю взгляд туда на "Тест". Опять же, обозреватель тестов может не раскрыть макрос GROUP
.
Дело принято. Я удалил GROUP и заменил ее исходным текстом «FactoryTest» и добавил «Test» ко всем именам, используемым во втором аргументе. Проект по-прежнему строится и работает с теми же результатами. И, к сожалению, то же самое происходит и с обозревателем тестов, который не находит никаких тестов.
Только что проверил, TEST(FactorialTest, HandlesNegativeInput)
у меня работает хорошо.
Задача решена.
Причина, по которой Обозреватель тестов не находит никаких тестов, заключается в том, как я организовал свои данные.
Я храню все свои данные в общем сетевом ресурсе и использую ссылку на этот общий ресурс, чтобы он отображался как диск «H:». Фактические данные находятся на NAS.
При обнаружении тестов Test Explorer пропускает «внешние данные», и я проследил за этой строкой :-(
File H:\...\MyTestSolution\sources\MyTest\x64\Debug\MyTest.exe came from another computer and was blocked to help protect this computer.
В качестве теста я скопировал проект на свой локальный диск C: без изменений. Теперь Обозреватель тестов может находить тесты.
Это меняет вопрос: «Как заставить Test Explorer принимать данные с моего NAS?» но это другая проблема.
Обновлено: следующая команда для создания пути в локальном ресурсе (и открытия решения с использованием этого местоположения), по-видимому, обходит проверку обозревателя тестов.
mklink /D C:\Home \\MyNas\MyHome
Примечание. Это ни в коем случае не общий метод, позволяющий сделать общий ресурс NAS похожим на локальное устройство/каталог, но его достаточно, чтобы обмануть Test Explorer в данный момент.
Название тестового костюма должно заканчиваться на Test. Я не уверен, что тестовое исследование может расширять макросы.