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++ 向量的内容。
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) 我现在正在实现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
我正在使用Google Test和Google Mock框架进行项目的单元测试。我有各种单元测试项目,并且想要自动化我的构建,以便运行所有项目。
我期望单元测试可执行文件在成功时返回0,在任何测试失败时返回1(或任何其他值),但是当所有测试通过时,我得到1。我收到一些GMOCK警告,但找不到有关影响返回值的警告的任何文档。
我尝试运行测试过滤以仅运行一个测试用例,在该用例中,不会触发GMOCK警告,并且返回值仍为1。
我有几个DISABLED测试用例,所以我将它们注释掉。仍然获得1作为返回值。
根据RUN_ALL_TESTS
宏的文档和代码注释,返回值应为0。
我想不出会导致返回值1的任何其他内容。我是否缺少任何内容?
我是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) 应该说我是初学者,所以这个问题可能看起来很愚蠢.
我只看一个人的代码,我不知道以下行的含义
EXPECT_EQ(input.getErrorNum(), 0) << input.getErrorMsg();
Run Code Online (Sandbox Code Playgroud)
我不知道operator <<是什么意思是由gtest定义的?
和
EXPECT_EQ()
Run Code Online (Sandbox Code Playgroud)
是由谷歌提供的测试结构"gtest"定义的宏.
我想生成不同的命名函数,用于编写单元测试用例.我想这样做基本上为每个单元测试用例赋予唯一的名称.
我正在使用谷歌测试框架来编写单元测试用例.我必须用来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__
?
我使用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)
我怎么解决这个问题?
我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) 我运行这个测试:
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++ ×10
googletest ×10
googlemock ×2
c ×1
c++11 ×1
char ×1
macos ×1
macros ×1
mocking ×1
redefinition ×1
string ×1
stringstream ×1
unit-testing ×1
xcode ×1