2

我正在尝试使用 Microsoft CppUnitTestFramework。我在一个解决方案中有两个独立的项目,一个是实际代码,另一个是单元测试代码。现在我想测试在第一个项目中定义的“DijkstarImpl”类,并在项目 Properties->C++->General->AdditionalInclude 目录中添加了该类的路径。测试项目编译成功,但是当我运行测试时出现此错误:

错误 2 错误 LNK2001:未解析的外部符号“公共:静态类 DijkstarImpl * UnitTest_FasTrack::UnitTest1::dijkstarImpl”(?dijkstarImpl@UnitTest1@UnitTest_FasTrack@@2PAVDijkstarImpl@@A) C:\working\TestFastTrack\UnitTest_FasTrack\unittest1.obj

错误 3 错误 LNK2001: 无法解析的外部符号 "public: __thiscall DijkstarImpl::DijkstarImpl(void)" (??0DijkstarImpl@@QAE@XZ) C:\working\TestFastTrack\UnitTest_FasTrack\unittest1.obj

错误是链接器错误,但我不知道我应该链接什么?它不是要包含在 Properties->Linker->Input 中的 lib 文件。以下代码段显示了单元测试代码。

#include "stdafx.h"
#include "CppUnitTest.h"
#include "DijkstarImpl.h"
#include "string.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest_FasTrack
{       
TEST_CLASS(UnitTest1)
{
    static DijkstarImpl*  dijkstarImpl;

public:
    TEST_CLASS_INITIALIZE(Initialize) 
    {           

        static DijkstarImpl*  UnitTest_FasTrack::UnitTest1::dijkstarImpl;
    }

    TEST_METHOD(TestMethod1)
    {



    }

};
}
4

1 回答 1

6

您需要在类外部但在同一个命名空间中声明变量的实例。

namespace UnitTest_FasTrack
{       
  TEST_CLASS(UnitTest1)
  {
    static DijkstarImpl* dijkstarImpl;

    public:
      TEST_CLASS_INITIALIZE(Initialize) 
      { 
      }

      TEST_METHOD(TestMethod1)
      {
      }
  };
  DijkstarImpl *UnitTest1::dijkstarImpl; //declared outside the scope of the class
}
于 2014-03-14T18:18:15.837 回答