首页 > 解决方案 > 为什么我在进行单元测试时 Visual Studio 会给出未解决的外部符号错误?

问题描述

所以我有一个使用 Visual Studio 开发的名为 OpenGLStuffs 的项目。我正在尝试为这个项目做测试。我创建了一个名为 AppTest 的单独测试项目。在这个测试项目中,我有一个名为 AppTest.cpp 的 cpp 文件,我将使用它来运行应用程序的测试版本。以下是测试文件的内容:

应用测试.cpp

#include "pch.h"
#include "CppUnitTest.h"
#include "../openGL/OpenGLStuffs/MainApp.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace AppTest
{
    TEST_CLASS(AppTest)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            runApp();
        }
    };
}

这是被测试的头文件的内容,它只有一行:

主应用程序.h

const int runApp();

我已经有一个定义runApp()函数的 MainApp.cpp 文件。太长了,这里就不贴了。

问题是当我尝试重建 AppTest 项目时,Visual Studio 给了我这个错误:

Error   LNK2019 unresolved external symbol "int const __cdecl runApp(void)" (?runApp@@YA?BHXZ) 
referenced in function "public: void __thiscall AppTest::AppTest::TestMethod1(void)" (?
TestMethod1@AppTest@1@QAEXXZ)   AppTest C:\my-space\my-stuffs\AppTest\AppTest.obj   1   

我尝试向 AppTests 添加对 OpenGLStuffs 的引用,但它似乎不起作用。我还尝试将配置类型更改为 .lib 而不是 .dll 并且重建成功,但这会使测试资源管理器不显示任何测试。

有人可以告诉我我做错了什么吗?提前致谢!

标签: c++visual-studio-2017linker-errors

解决方案


函数的主体是否在包含该标头的 .cpp 文件中?您也可以将主体包含在标头本身中,但是您必须声明它staticinline...否则该函数将被编译多次,从而导致链接错误。


推荐阅读