标签: googletest

如何使用 google-test 检查向量中的内容?

std::vector<uint8_t> vector1(10);
std::vector<uint8_t> vector2(10);

std::fill(vector1.begin(), vector1.end(), 2);
std::fill(vector2.begin(), vector2.end(), 2);

EXPECT_EQ(vector1, vector2);
Run Code Online (Sandbox Code Playgroud)

上面的 EXPECT_EQ() 是否检查向量 1 和向量 2 中的内容是否相等?如果不是,如何使用 googletest EXPECT_* 函数检查向量 1 和向量 2 中的内容是否相等?

googletest 的文档解释了如何测试 C 字符串和 C++ 字符串对象的内容,但没有解释如何检查 C++ 向量的内容。

c++ googletest

1
推荐指数
1
解决办法
2976
查看次数

如何在 Xcode 12 和 macOS Big Sur 11 中运行 C/C++ 应用程序的 GTest (GoogleTest)

Xcode 12我已经在我的计算机上设置了一个小项目macOS Big Sur来运行我的小型数学库,但现在我想测试它是否正常工作。为此,我选择了GTest- Google 测试框架aka googletest。如果有人告诉我如何执行它,这样我就可以制作我的第一个测试套件,那就太好了?

数学.hpp

class Vector {
public:
    float x, y;
};

class Point {
public:
    float x, y;
    Point AddVector(Vector v);
};
Run Code Online (Sandbox Code Playgroud)

数学.cpp

#include "math.hpp"

Point Point::AddVector(Vector v) {
    Point p2;
    p2.x = this->x + v.x;
    p2.y = this->y + v.y;
    return p2;
};
Run Code Online (Sandbox Code Playgroud)

c++ macos xcode googletest

1
推荐指数
1
解决办法
3795
查看次数

错误:先前在C++中定义的'int main(int,char**)'

我现在正在实现gtest,它给了我一个错误:主要在此定义.

这是utest.cpp

// Bring in my package's API, which is what I'm testing
#include "../src/test.cpp"
// Bring in gtest
#include <gtest/gtest.h>

// Declare a test
TEST(TestSuite, testCase1)
{
     EXPECT_EQ(5,getX(5));
}

// Run all the tests that were declared with TEST()
int main(int argc, char **argv){
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

这是我正在测试test.cpp的代码

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <Project2Sample/R_ID.h>
#include <geometry_msgs/Twist.h>
#include <nav_msgs/Odometry.h>
#include <sensor_msgs/LaserScan.h>


#include <sstream>
#include "math.h"

int getX(int x)
{
    return x;
}

int main(int argc, char **argv)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ program-entry-point compiler-errors googletest redefinition

0
推荐指数
1
解决办法
6256
查看次数

Google测试返回值

我正在使用Google Test和Google Mock框架进行项目的单元测试。我有各种单元测试项目,并且想要自动化我的构建,以便运行所有项目。

我期望单元测试可执行文件在成功时返回0,在任何测试失败时返回1(或任何其他值),但是当所有测试通过时,我得到1。我收到一些GMOCK警告,但找不到有关影响返回值的警告的任何文档。

我尝试运行测试过滤以仅运行一个测试用例,在该用例中,不会触发GMOCK警告,并且返回值仍为1。

我有几个DISABLED测试用例,所以我将它们注释掉。仍然获得1作为返回值。

根据RUN_ALL_TESTS宏的文档和代码注释,返回值应为0。

我想不出会导致返回值1的任何其他内容。我是否缺少任何内容?

c++ googletest googlemock

0
推荐指数
1
解决办法
9087
查看次数

Google Mock实际函数调用计数与EXPECT_CALL不匹配

我是Google Mock的新手,正在尝试使用此代码,我也检查了此链接.

实际函数调用计数与EXPECT_CALL不匹配(*mock,display())

但无法获得适当的输入.

Base.cc

class Base
{
    int val;
    string msg;
    public:
    Base():val(0), msg("world"){}
    virtual ~Base(){}
    virtual void set(int x, string msg)
    {
            this->val = val;
            this->msg = msg;
    }
    virtual void get()
    {
            cout << "val    :" << this->val << endl;
            cout << "msg    :" << this->msg << endl;
    }
};
class MockBase : public Base
{
    public:
    MOCK_METHOD0(get, void());
    MOCK_METHOD2(set, void(int val, string msg));
};
Run Code Online (Sandbox Code Playgroud)

Base_unittest.cc

int main(int argc, char * argv[])
{
    std::cout << "in main" …
Run Code Online (Sandbox Code Playgroud)

c++ mocking googletest googlemock

0
推荐指数
1
解决办法
4379
查看次数

运算符<<在c ++和gtest中

应该说我是初学者,所以这个问题可能看起来很愚蠢.

我只看一个人的代码,我不知道以下行的含义

EXPECT_EQ(input.getErrorNum(), 0) << input.getErrorMsg();
Run Code Online (Sandbox Code Playgroud)

我不知道operator <<是什么意思是由gtest定义的?

EXPECT_EQ()
Run Code Online (Sandbox Code Playgroud)

是由谷歌提供的测试结构"gtest"定义的宏.

c++ googletest

0
推荐指数
1
解决办法
625
查看次数

C++使用__COUNTER__自动生成不同的命名函数

我想生成不同的命名函数,用于编写单元测试用例.我想这样做基本上为每个单元测试用例赋予唯一的名称.

我正在使用谷歌测试框架来编写单元测试用例.我必须用来TEST_Macro编写单元测试用例.我想自动为每个单元测试提供递增的数字.

这是我的(非工作)代码:

#include <iostream>
using namespace std;

#define join(x, y) x## y

void join(test, __COUNTER__)()
{
    cout << "\n 1";
}

void join(test, __COUNTER__)()
{
    cout << "\n 2";
}

int main()
{
    cout << "Hello world!" << endl;

     test0() ;
     test1() ;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用生成唯一函数名的正确方法是什么__COUNTER__

c++ macros googletest c-preprocessor

0
推荐指数
1
解决办法
97
查看次数

如何使用.c文件在google test而不是.cpp文件中编写测试类?

我使用googletest为我的Android NDK项目包含.c文件.我使用了.cpp类型的测试类来做同样的事情.我想改用.c文件.我尝试使用它时出现以下错误:

Running main() from gtest_main.cc
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (1 ms total)
[  PASSED  ] 0 tests.
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

c c++ unit-testing googletest

0
推荐指数
1
解决办法
1779
查看次数

如何在重用std :: stringstream变量时避免使用std :: stringstream.str()和std :: stringstream.clear()?

operator<<像这样重载:

std::ostream& operator<<(std::ostream& os, SomeClass C){ 
//SomeClass is the class to be represented with operator overloading
os << "{ ";
os << C.getPropertyA() << " ";
os << C.getPropertyB() << " }";
//getPropertyA(), getPropertyB():functions of 'SomeClass' that return std::string
return os;
}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用googletest来测试这样的operator<<重载:

SomeClass C1;
SomeClass C2;
.
.
std::stringstream ss;
std::string str;

//First test
ss << C1;
std::getline(ss, str);
EXPECT_EQ("<some expected value>", str); // googletest test

//Second test
ss.str("");ss.clear(); //Mandatory if 'ss' need …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading stringstream googletest c++11

0
推荐指数
1
解决办法
375
查看次数

谷歌测试:无法从char数组创建字符串?

我运行这个测试:

TEST_F(CHAR_TESTS, wtf){
  char letter[3] = {'A','B','C'};
  char types[2] = {'o','s'};
  char tmp[3];
  for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
      for(int k=0;k<2;k++){
        tmp[0]=letter[i];
        tmp[1]=letter[j];
        tmp[2]=types[k];
        std::string combination(tmp);
        std::cout << combination << std::endl;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这打印这个:

AAo~
AAs~
ABo~
ABs~
ACo~
ACs~
BAo~
BAs~
BBo~
BBs~
BCo~
BCs~
CAo~
CAs~
CBo~
CBs~
CCo~
CCs~
Run Code Online (Sandbox Code Playgroud)

我不认为这是打印本身的问题,因为我注意到一些测试比较了char数组生成的字符串没有通过,我最终做到这一点,我无法弄清楚为什么.所以感觉确实"组合"字符串最终没有预期的内容.

"常规"可执行文件(不是gtest)中的相同代码打印出预期的内容(没有奇怪的补充字符的3个字符).

c++ string char googletest

0
推荐指数
1
解决办法
233
查看次数