相关疑难解决方法(0)

如何开始使用GTest和CMake

我最近因使用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)

unit-testing cmake googletest

113
推荐指数
4
解决办法
10万
查看次数

错误C2220:警告被视为错误 - 未生成"对象"文件

我有下面的课:

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)

c++ compiler-errors project object compiler-warnings

32
推荐指数
4
解决办法
10万
查看次数

VS 2017命令行错误D8004

我别无选择,我正在尝试在 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' 需要参数

有人可以准确地向我发送我需要写的内容来抑制这种情况吗?

c++ suppress-warnings visual-studio-2017

6
推荐指数
2
解决办法
8760
查看次数