Невозможно заставить обозреватель тестов Visual Studio 2022 найти C++ Google Tests

Я работаю с 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(...) не имеет никакого значения.

Я посетил следующий сайт для получения дополнительной информации

  1. проверенная конфигурация. Тестовый адаптер для Google Test установлен и доступен в меню Инструменты->Параметры->Тестовый адаптер для Google Test. Оставил все детали конфигурации в настройках по умолчанию. В проекте используется пакет Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.

Отмечено Инструменты->Параметры->Тестовый адаптер для Google Test->Печать отладочной информации = true. Это не дает другого результата и не генерирует никакой новой информации.

  1. проверил ручной запуск. Может создавать и запускать тесты в командной строке (в том числе с опцией --gtest_list_tests). Результаты, как и ожидалось.

  2. Проверка раздела «Устранение неполадок» из https://github.com/Microsoft/TestAdapterForGoogleTest?tab=readme-ov-file

  • Нет файла «*.exe.is_google_test», добавленного в проект и скопированного для результатов сборки, но это не имеет значения.
  • «Настройте регулярное выражение для обнаружения тестов в одном и том же месте». но нет информации, что куда добавить. Я не знаю, что для этого сделать.

Я застрял, есть ли у кого-нибудь совет, как сделать тесты видимыми в обозревателе тестов?

Название тестового костюма должно заканчиваться на Test. Я не уверен, что тестовое исследование может расширять макросы.

3CxEZiVlQ 15.06.2024 19:03

@3CxEZiVIQ: согласно учебнику GoogleTest имена легко спутать, поэтому я в этом отношении немного осторожен. Все имена, которые я использую, независимо от того, что это такое и связано с тестированием, заканчиваются на Test, проект называется MyTest, основной исходный файл — test.cpp, тестовая группа называется FactorialTest (код заимствован из руководства по GoogleTest). Я думаю, что я не выполнил требование использовать Test в конце (некоторых) имен. Я не уверен, как обозреватель тестов обрабатывает все элементы, и именно в этом проблема (я думаю).

PapaAtHome 15.06.2024 21:47
TEST(GROUP, HandlesNegativeInput) - направляю взгляд туда на "Тест". Опять же, обозреватель тестов может не раскрыть макрос GROUP.
3CxEZiVlQ 15.06.2024 21:53

Дело принято. Я удалил GROUP и заменил ее исходным текстом «FactoryTest» и добавил «Test» ко всем именам, используемым во втором аргументе. Проект по-прежнему строится и работает с теми же результатами. И, к сожалению, то же самое происходит и с обозревателем тестов, который не находит никаких тестов.

PapaAtHome 15.06.2024 23:07

Только что проверил, TEST(FactorialTest, HandlesNegativeInput) у меня работает хорошо.

3CxEZiVlQ 16.06.2024 01:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
143
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Задача решена.

Причина, по которой Обозреватель тестов не находит никаких тестов, заключается в том, как я организовал свои данные.

Я храню все свои данные в общем сетевом ресурсе и использую ссылку на этот общий ресурс, чтобы он отображался как диск «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 в данный момент.

Другие вопросы по теме