单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类

时间:2019-08-18 22:28:27

标签: c++ unit-testing visual-studio-2019

我正在尝试在c ++中另一个单元测试项目(我们称为UnitTest1)的解决方案(我们称为Project1)中的一个项目中的类上执行一些基本的单元测试。我正在使用Visual Studio 2019的最新版本。

我在Visual Studio 2019中为c ++创建了一个全新的解决方案,并在另一个文件中添加了带有HelloWorld类的控制台应用程序,该文件只具有一种返回std :: string“ Hello World”的方法。

然后,我在解决方案中添加了一个新的“本机测试项目”,在引用下添加了Project1控制台应用程序,并键入了如下所示的代码:

project1文件:

    #include <iostream>
    #include "HelloWorld.h"

    int main() {
    HelloWorld* hello = new HelloWorld();
        std::cout << hello->sayHello();
    }

HelloWorld.h:

    #pragma once
    #include <string>

    class HelloWorld {
    public: HelloWorld();
    public: std::string sayHello();
    };

HelloWorld.cpp:

    #include "HelloWorld.h"
    #include <string>

    HelloWorld::HelloWorld() {

    }

    std::string HelloWorld::sayHello() {
    return std::string("Hello World");
    }

UnitTest1.cpp:

    #include "pch.h"
    #include "CppUnitTest.h"
    #include "..//ConsoleApplication1/HelloWorld.h"

    using namespace Microsoft::VisualStudio::CppUnitTestFramework;

    namespace UnitTest1 {
    TEST_CLASS(UnitTest1)
    {
    public:

        TEST_METHOD(TestMethod1)
        {
            HelloWorld* hello = new HelloWorld();
            Assert::AreEqual(hello->sayHello(), std::string("Hello World"));
        }
    };
    }

当我尝试通过测试浏览器运行测试时,我得到:

1>------ Build started: Project: UnitTest1, Configuration: Debug Win32 ------
1>pch.cpp
1>UnitTest1.cpp
1>   Creating library C:\Users\Iblob\source\repos\ConsoleApplication1\Debug\UnitTest1.lib and object C:\Users\Iblob\source\repos\ConsoleApplication1\Debug\UnitTest1.exp
1>UnitTest1.obj : error LNK2019: unresolved external symbol "public: __thiscall HelloWorld::HelloWorld(void)" (??0HelloWorld@@QAE@XZ) referenced in function "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@1@QAEXXZ)
1>UnitTest1.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall HelloWorld::sayHello(void)" (?sayHello@HelloWorld@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@1@QAEXXZ)
1>C:\Users\Iblob\source\repos\ConsoleApplication1\Debug\UnitTest1.dll : fatal error LNK1120: 2 unresolved externals
1>Done building project "UnitTest1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

我希望链接器应该能够找到根据Microsoft自己的教程所引用的文件:https://docs.microsoft.com/en-us/visualstudio/test/writing-unit-tests-for-c-cpp?view=vs-2019

我尝试将类头文件和cpp作为现有项添加到我的单元测试项目中,但是当我尝试运行测试时,它只是试图在HelloWorld类中找到#include“ pch.h”。 / p>

我在这里想告诉链接器在哪里可以找到类符号的地方是什么?

1 个答案:

答案 0 :(得分:0)

在我的unitTest1.cpp文件中添加#include“ ..//ConsoleApplication1/HelloWorld.cpp”似乎已经解决了问题,尽管我不确定这是否是理想的解决方案,但仍将其标记为答案。 / p>