我最近因使用CMake编译我的C++项目而被出售,现在我想开始为我的代码编写一些单元测试.我决定使用Google Test实用程序来帮助解决这个问题,但在入门时需要一些帮助.
我一整天都在阅读各种指南和示例,包括Primer,IBM的介绍以及有关SO(此处和此处)的一些问题以及我已经忘记的其他来源.我意识到那里有很多,但不知怎的,我仍然遇到困难.
我目前正在尝试实施最基本的测试,以确认我已经编译/安装了gtest,并且它无法正常工作.唯一的源文件(testgtest.cpp)被认为几乎完全由该前面的回答:
#include <iostream>
#include "gtest/gtest.h"
TEST(sample_test_case, sample_test)
{
EXPECT_EQ(1, 1);
}
Run Code Online (Sandbox Code Playgroud)
和我关联的CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.6)
project(basic_test)
# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})
# Add test cpp file
add_executable(runUnitTests
testgtest.cpp
)
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})
add_test(
NAME runUnitTests
COMMAND runUnitTests
)
Run Code Online (Sandbox Code Playgroud)
请注意,我选择链接gtest_main而不是在cpp文件的末尾提供main,因为我相信这将允许我更容易地将测试扩展到多个文件.
构建生成的.sln文件(在Visual C++ 2010 Express中)时,我很遗憾地得到了一个很长的表单错误列表
2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) …Run Code Online (Sandbox Code Playgroud) 我有下面的课:
class Cdata12Mnt
{
public:
char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
char cflpath[256];
char basetext[256];
UINT database[ID1_MAX_INF];
int State;
public:
char SelectPath[256];
public:
int GetIOBName(int slt,char *Name);
Cdata12Mnt(char *SelectPath);
virtual ~Cdata12Mnt();
int GetValue(int id);
int GetState() { return State; }
};
Run Code Online (Sandbox Code Playgroud)
我的功能如下:
Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
SCTReg reg;
char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
char *startcode[] = {"CNTL_CODE ","SEGMENT "};
char *stopcode = {"END_CNTL_CODE "};
FILE *fp;
int ii, infl;
State = 0;
for (ii = 0; ii < …Run Code Online (Sandbox Code Playgroud) 我别无选择,我正在尝试在 Visual Studio 2017 Community 上使用 GoogleTest,但它给了我很多
警告 C4996:'std::tr1':警告 STL4002:非标准 std::tr1 命名空间和仅 TR1 的机器已弃用并将被删除。您可以定义 _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING 以确认您已收到此警告。
我想抑制它,所以我进入“项目属性”->“C/C++”->“高级”->“抑制特定警告”,然后尝试
/wd4996
/wdSTL4002,
/wd4996;
/wdC4996
/wd[4996]...
Run Code Online (Sandbox Code Playgroud)
等等,老实说,我尝试了所有可能的组合,这让我很困惑
2>cl : 命令行错误 D8004: '/wd' 需要参数
有人可以准确地向我发送我需要写的内容来抑制这种情况吗?