Тестовый проводник Visual Studio прерывается при попытке связать объектные файлы - PullRequest
0 голосов
/ 27 марта 2020

Я хочу использовать обозреватель тестов Visual Studio для запуска моих тестов Google. Когда я создаю консольный проект, добавляю проект Google Test по умолчанию и создаю решение, он находит тесты, как и предполагалось.

Default tests running

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

class foo
{
    public:
        foo() : the_count(0) {}
        ~foo() = default;

        void count_plus() { the_count++; };
        int get_count() { return the_count; };

    private:
        int the_count;
};

Затем я изменяю свой test.cpp файл (файл по умолчанию, созданный в проекте Visual Studio для Google Test), чтобы использовать мой новый класс.

#include "pch.h"
#include <iostream>
#include "..\ConsoleApplication2\foo.h"

class tester : public testing::Test {

    public:
        foo bar;

        void SetUpTestSuite() {
            std::cout << "Setup..\n";
        }

        void TearDownTestSuite() {
            std::cout << "Teardown..\n";
        }
};

TEST_F(tester, TestFixture1)
{
    EXPECT_EQ(bar.get_count(), 0);

    bar.count_plus();

    EXPECT_EQ(bar.get_count(), 1);
}

Создание этого решения также автоматически обнаруживает тесты и успешно их запускает.

Still working...

Теперь это становится интересным ... Когда я перемещаю свою реализацию foo в .cpp file.

foo.h

class foo
{
    public:
        foo();
        ~foo() = default;

        void count_plus();
        int get_count();

    private:
        int the_count;
};

foo. cpp

#include "foo.h"

foo::foo()
{
    the_count = 0;
}

void
foo::count_plus()
{
    the_count++;
}

int
foo::get_count()
{
    return the_count;
}

А затем я создаю решение, и вначале я получаю сообщение об ошибке компоновщика с жалобами на неразрешенные внешние данные.

Unresolved externals

Однако, если я изменю настройки компоновщика тестового проекта, чтобы они указывали на другой проект, например:

Properties -> Linker -> Input -> Additional Dependencies -> add $(SolutionDir)ConsoleApplication2\$(IntDir)*.obj

который я получил от этого ответа, я могу успешно построить проект.

Однако после того, как я закончу sh сборку проекта, я больше не могу видеть или запускать свои тесты.

enter image description here

Я что-то здесь не так делаю? Или Visual Studio просто сломан?

1 Ответ

0 голосов
/ 28 марта 2020

Я понял это. Проект, который генерирует объектные файлы, не может иметь функцию main(), так как это переопределяет функцию main() Google Test.

Я решил это следующим образом:

  1. Создание пустой проект (без main()), который содержит весь мой исходный код и задает тип конфигурации этого проекта как Stati c library (.lib) .

  2. Создание проекта консольного приложения (или любого другого, который вам подходит), который содержит мою точку входа main(). В этом проекте я добавляю ссылку на мой .lib проект.

  3. Создайте проект Google Test. В этом проекте я также добавляю ссылку на мой .lib проект.

  4. Установите проект на втором шаге как Startup project .

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

...