gcc版本升级
1、用于加入源,方便更新。
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2、更新
sudo apt-get update
3、将/usr/bin/gcc和/usr/bin/g++这两个快捷方式给删除
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
4、安装 g++ 和 gcc (以7版本为例)
sudo apt-get install gcc-7
sudo apt-get install g++-7
5、将gcc和g++绑定到新安装的版本上
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 20
6、检查是否安装成功
gcc --version
g++ --version
··········以上就能用了························
二、g++ gcc的版本切换
因为笔者安装了多个版本,在以上绑定后,版本仍显示4.9,而不是7.为此虚做版本切换:
如果你的Ubuntu中安装了多个版本的g++或者gcc,比如4.8 4.9 5.5等多个版本,想要切换时,打开新的终端,并输入
sudo update-alternatives --config g++
按照提示数字选择想要使用的版本。
即可选择g++版本,gcc同理,在终端中输入
sudo update-alternatives --config gcc
选择相应数字,即选择想要使用的版本。
三、linux g++开启C++11/14支持
sudo vim ~/.bashrc
在some more ls aliases注释块的地方添加下面这两行:
alias g++11='g++ -g -Wall -std=c++11'
alias g++14='g++ -g -Wall -std=c++14'
编译安装
git clone https://github.com/google/googletest
cd googletest
cmake
make
make install
apt-get 安装
sudo apt-get install libgtest-dev
简单测试
#include<gtest/gtest.h>
int add(int a,int b){
return a+b;
}
TEST(testCase,test0){
EXPECT_EQ(add(2,3),5);
}
int main(int argc,char **argv){
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
//编译
g++ test1.cpp -o test -lgtest -lpthread
./test
ros@ubuntu:~/gtest$ ./test
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from testCase
[ RUN ] testCase.test0
[ OK ] testCase.test0 (1 ms)
[----------] 1 test from testCase (1 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[ PASSED ] 1 test.
gtest断言
gtest中断言的宏可以分为两类:一类是ASSERT宏,另一类就是EXPECT宏了。
1、ASSERT_系列:如果当前点检测失败则退出当前函数
2、EXPECT_系列:如果当前点检测失败则继续往下执行
如果你对自动输出的错误信息不满意的话,也是可以通过operator<<能够在失败的时候打印日志,将一些自定义的信息输出。
ASSERT_系列:
bool值检查
1、 ASSERT_TRUE(参数),期待结果是true
2、ASSERT_FALSE(参数),期待结果是false
数值型数据检查
3、ASSERT_EQ(参数1,参数2),传入的是需要比较的两个数 equal
4、ASSERT_NE(参数1,参数2),not equal,不等于才返回true
5、ASSERT_LT(参数1,参数2),less than,小于才返回true
6、ASSERT_GT(参数1,参数2),greater than,大于才返回true
7、ASSERT_LE(参数1,参数2),less equal,小于等于才返回true
8、ASSERT_GE(参数1,参数2),greater equal,大于等于才返回true
字符串检查
9、ASSERT_STREQ(expected_str, actual_str),两个C风格的字符串相等才正确返回
10、ASSERT_STRNE(str1, str2),两个C风格的字符串不相等时才正确返回
11、ASSERT_STRCASEEQ(expected_str, actual_str)
12、ASSERT_STRCASENE(str1, str2)
13、EXPECT_系列,也是具有类似的宏结构的
gtest系列之事件机制
“事件” 本质是框架给你提供了一个机会, 让你能在这样的几个机会来执行你自己定制的代码, 来给测试用例准备/清理数据。gtest提供了多种事件机制,总结一下gtest的事件一共有三种:
1、TestSuite事件
需要写一个类,继承testing::Test,然后实现两个静态方法:SetUpTestCase 方法在第一个TestCase之前执行;TearDownTestCase方法在最后一个TestCase之后执行。
2、TestCase事件
是挂在每个案例执行前后的,需要实现的是SetUp方法和TearDown方法。SetUp方法在每个TestCase之前执行;TearDown方法在每个TestCase之后执行。
3、全局事件
要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。SetUp方法在所有案例执行前执行;TearDown方法在所有案例执行后执行。
例如全局事件可以按照下列方式来使用:
除了要继承testing::Environment类,还要定义一个该全局环境的一个对象并将该对象添加到全局环境测试中去。
#include <limits.h>
#include "gtest/gtest.h"
#include "Multiply.h"
class MultiplyTest : public ::testing::Test {
protected:
virtual void SetUp() {
}
virtual void TearDown() {
}
};
TEST_F(MultiplyTest,twoValues){
const int x = 4;
const int y = 5;
Multiply multiply;
EXPECT_EQ(20,multiply.twoValues(x,y));
EXPECT_EQ(6,multiply.twoValues(2,3));
}