使用Visual Studio C ++进行单元测试时的链接器错误

大卫·培根

我想用Visual Studio单元测试我的C ++项目。将项目中的文件夹添加为测试项目的包含路径之后,尝试编译测试时出现链接器错误:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: __thiscall Piece::Piece(enum Color)" (??0Piece@@QAE@W4Color@@@Z) referenced in function "public: __thiscall Bishop::Bishop(enum Color)" (??0Bishop@@QAE@W4Color@@@Z)    ChessPlusPlus-Tests D:\Documents\Projects\ChessPlusPlus\ChessPlusPlus-Tests\BishopTests.obj 1   
Error   LNK2019 unresolved external symbol "public: __thiscall Board::~Board(void)" (??1Board@@QAE@XZ) referenced in function "public: void __thiscall ChessPlusPlusTests::BishopTests::ValidMovesTest(void)" (?ValidMovesTest@BishopTests@ChessPlusPlusTests@@QAEXXZ)  ChessPlusPlus-Tests D:\Documents\Projects\ChessPlusPlus\ChessPlusPlus-Tests\BishopTests.obj 1   
Error   LNK2019 unresolved external symbol "public: void __thiscall Board::placePieceAt(class Piece * const,struct Position)" (?placePieceAt@Board@@QAEXQAVPiece@@UPosition@@@Z) referenced in function "public: void __thiscall ChessPlusPlusTests::BishopTests::ValidMovesTest(void)" (?ValidMovesTest@BishopTests@ChessPlusPlusTests@@QAEXXZ)    ChessPlusPlus-Tests D:\Documents\Projects\ChessPlusPlus\ChessPlusPlus-Tests\BishopTests.obj 1   
Error   LNK2001 unresolved external symbol "public: virtual class std::vector<struct Position,class std::allocator<struct Position> > __thiscall Bishop::getMovesFor(struct Position,class Board &)" (?getMovesFor@Bishop@@UAE?AV?$vector@UPosition@@V?$allocator@UPosition@@@std@@@std@@UPosition@@AAVBoard@@@Z)   ChessPlusPlus-Tests D:\Documents\Projects\ChessPlusPlus\ChessPlusPlus-Tests\BishopTests.obj 1   
Error   LNK2001 unresolved external symbol "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Bishop::toString(void)" (?toString@Bishop@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)    ChessPlusPlus-Tests D:\Documents\Projects\ChessPlusPlus\ChessPlusPlus-Tests\BishopTests.obj 1   
Error   LNK2001 unresolved external symbol "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Bishop::toShortString(void)" (?toShortString@Bishop@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)  ChessPlusPlus-Tests D:\Documents\Projects\ChessPlusPlus\ChessPlusPlus-Tests\BishopTests.obj 1   

我的测试源代码:

#include "stdafx.h"
#include "CppUnitTest.h"
#include "Bishop.h"
#include "Board.h"
#include "TestUtils.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace ChessPlusPlusTests
{
    TEST_CLASS(BishopTests)
    {
    public:

        TEST_METHOD(ValidMovesTest)
        {
            // Arrange
            Board board{};
            Bishop *piece = new Bishop{ Color::WHITE };
            Position pos{ 3,3 };
            board.placePieceAt(piece, pos);

            // Act
            auto validPositions = piece->getMovesFor(pos, board);

            // Assert
            TestUtils::AssertPositions(validPositions, {
                0,0,0,0,0,0,0,1,
                1,0,0,0,0,0,1,0,
                0,1,0,0,0,1,0,0,
                0,0,1,0,1,0,0,0,
                0,0,0,0,0,0,0,0,
                0,0,1,0,1,0,0,0,
                0,1,0,0,0,1,0,0,
                1,0,0,0,0,0,1,0,
            });
        }

    };
}

如果不添加包含路径,则测试项目不会编译,因为主项目中包含的头文件依赖于包含路径。

主项目编译正常。

有人可以帮助我了解问题所在吗?

谢谢!

帕特里斯·蒂莫西(Patrice Thimothee)

我认为所选答案不正确。测试通常应在其环境中运行;因此,他们不应访问实现(.cpp)


在Visual Studio(VS 2017)上创建单独的测试项目时,需要创建对要测试项目的引用(右键单击测试项目->添加->参考->勾号项目):添加参考

如果看到一些链接器错误,请从单元测试项目中右键单击:项目->链接器->输入->其他依赖关系->编辑,然后将路径添加到.obj文件。您可以尝试类似“ $(SolutionDir)ConsoleApplication1 \ $(IntDir)*。obj”,其中ConsoleApplication1是目标项目名称。

.obj的路径

最初,我只想对Cornelis的帖子发表评论,但我不能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用CppUnitTestFramework在Visual Studio本机C ++单元测试中获取$(ProjectDir)路径?

如何在Visual Studio 2013的C ++项目中编译和链接Google测试,但如何使用NuGet软件包管理器安装的Gtest进行链接?

使用Visual Studio对本地VS C ++的gtest单元测试进行代码覆盖

使用Visual Studio测试适配器进行Boost单元测试-设置工作目录

Visual Studio C ++托管测试项目和本机单元测试项目之间的区别

IntelliTest与 在Visual Studio中进行单元测试

在Visual Studio / Resharper中以调试模式运行单元测试时出现“不确定:测试未运行”错误

在Visual Studio中进行单元测试Typescript

C#UWP Visual Studio 2017单元测试

Visual Studio Code C ++单元测试是否覆盖?

使用Visual Studio 2017的C ++++库链接错误

在Visual Studio中使用Catch2进行单元测试的最佳实践

在Visual Studio 2019 C ++中使用CPPUnitTest编写“ DivideByZero”单元测试用例时出现问题

Unity的链接器错误(C单元测试框架)

在Visual Studio 2012中使用Moq进行单元测试

使用Android Studio和Gradle进行单元测试?

C ++:使用Visual Studio编译器时的const指针

如何使用Visual Studio 2013 Ultimate对WinForms进行单元测试?

C#单元测试Visual Studio 2013测试失败

使用业力茉莉花进行单元测试时出现控制器错误

Visual Studio C#单元测试-报告每次运行的结果

在Visual Studio 2013中使用HttpClient进行单元测试/集成测试Web API

在Visual Studio中进行正确的单元测试

如何在 Visual Studio 2015 中进行单元测试

Visual Studio 2015 未运行 C++ 单元测试

使用具有相对路径的文件进行 Visual Studio 单元测试

如何以编程方式退出正在运行的单元测试(使用 Visual Studio c# 和单元测试框架)

如何使用 Visual Studio 单元测试框架或 NUnit 框架在 C# 中模拟对象?

Visual Studio 16.8.2 - 带有代码修复项目模板的分析器在尝试调试单元测试时产生错误