vs2013 c++ 项目中的单元测试问题
Trouble with unit tests in vs2013 c++ project
我正在尝试在 vs2013 中为我的 C++ 代码创建单元测试,其中包含 CLocalDBManager.h 和 CLocalDBManager.cpp 文件,确定单个 class,并包含 4 个 .h 文件结构和 sqlite 来源。
我尝试做所有类似 here 的事情,它对复制粘贴的代码运行良好,但是当我尝试使用我自己的代码时,出现了问题。
当我创建新的单元测试项目并从上面的 link 添加 HelloWorld.cpp 和 HelloWorld.h 文件时,一切正常,但是当我尝试添加 CLocalDBManager.h CLocalDBManager.cpp 在新版本中,编译器变得疯狂 - 它在 .cpp 文件中发现了很多错误,如下所示:
enter image description here
所有的 includes 和其他东西都和示例中的完全一样,我真的不知道如何处理它。
CLocalDBManager.h 文件中有代码:
#include "SLandlord.h"
#include "SOffice.h"
#include "SMapSegment.h"
#include "SBuilding.h"
#include "sqlite3.h"
#include <string>
#include <map>
#include <vector>
#pragma once
class CLocalDBManager
{
public:
template <class T> int LoadItemByID(int nID, T *sResult); //exception
std::vector <int> FindBuildingsInArea(int nTopCoordinate, int nBottomCoordinate, int LeftCoordinate, int RightCoordinate);
static int _LoadMapSegmentByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _LoadBuildingByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _LoadOfficeByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _LoadLandlordByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _FindBuildingsInAreaCallback(void *vSuitableBuildings, int nNumberOfColumns, char **cData, char **cColumnNames);
private:
void _OpenConnection(); //exception
void _CloseConnection() _NOEXCEPT;
sqlite3 *m_sqlHandler;
const char *m_cDBFile = "DB.sqlite";
const std::string m_strQueryPrefix = "SELECT ";
const std::string m_strQueryAny = "*";
const std::string m_strQuerySource = " FROM ";
const std::string m_strQueryConditions = " WHERE ";
const std::string m_strQueryEqual = " = ";
const std::string m_strQueryPt1 = "(XCoordinate BETWEEN";
const std::string m_strQueryRange = " AND ";
const std::string m_strQueryPt3 = ") AND (YCoordinate BETWEEN ";
const std::string m_strQueryPt4 = ")";
};
文件 CLocalDBManager.cpp 包含 class 函数的这 2 个包含和实现
#include "CLocalDBManager.h"
#include "stdafx.h"
此外,无论我是否在单元测试 .cpp 中包含 CLocalDBManager.h,这些错误每次都会出现。
刚刚发现,问题出在预编译头文件上,禁用它们后一切正常
我正在尝试在 vs2013 中为我的 C++ 代码创建单元测试,其中包含 CLocalDBManager.h 和 CLocalDBManager.cpp 文件,确定单个 class,并包含 4 个 .h 文件结构和 sqlite 来源。
我尝试做所有类似 here 的事情,它对复制粘贴的代码运行良好,但是当我尝试使用我自己的代码时,出现了问题。
当我创建新的单元测试项目并从上面的 link 添加 HelloWorld.cpp 和 HelloWorld.h 文件时,一切正常,但是当我尝试添加 CLocalDBManager.h CLocalDBManager.cpp 在新版本中,编译器变得疯狂 - 它在 .cpp 文件中发现了很多错误,如下所示:
enter image description here
所有的 includes 和其他东西都和示例中的完全一样,我真的不知道如何处理它。
CLocalDBManager.h 文件中有代码:
#include "SLandlord.h"
#include "SOffice.h"
#include "SMapSegment.h"
#include "SBuilding.h"
#include "sqlite3.h"
#include <string>
#include <map>
#include <vector>
#pragma once
class CLocalDBManager
{
public:
template <class T> int LoadItemByID(int nID, T *sResult); //exception
std::vector <int> FindBuildingsInArea(int nTopCoordinate, int nBottomCoordinate, int LeftCoordinate, int RightCoordinate);
static int _LoadMapSegmentByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _LoadBuildingByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _LoadOfficeByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _LoadLandlordByIDCallback(void *vResult, int nNumberOfColumns, char **cData, char **cColumnNames) _NOEXCEPT;
static int _FindBuildingsInAreaCallback(void *vSuitableBuildings, int nNumberOfColumns, char **cData, char **cColumnNames);
private:
void _OpenConnection(); //exception
void _CloseConnection() _NOEXCEPT;
sqlite3 *m_sqlHandler;
const char *m_cDBFile = "DB.sqlite";
const std::string m_strQueryPrefix = "SELECT ";
const std::string m_strQueryAny = "*";
const std::string m_strQuerySource = " FROM ";
const std::string m_strQueryConditions = " WHERE ";
const std::string m_strQueryEqual = " = ";
const std::string m_strQueryPt1 = "(XCoordinate BETWEEN";
const std::string m_strQueryRange = " AND ";
const std::string m_strQueryPt3 = ") AND (YCoordinate BETWEEN ";
const std::string m_strQueryPt4 = ")";
};
文件 CLocalDBManager.cpp 包含 class 函数的这 2 个包含和实现
#include "CLocalDBManager.h"
#include "stdafx.h"
此外,无论我是否在单元测试 .cpp 中包含 CLocalDBManager.h,这些错误每次都会出现。
刚刚发现,问题出在预编译头文件上,禁用它们后一切正常