假设我新安装了一个win10系统,想在上面跑通一个gtest测试用例,那需要依次安装visual studio code、g++、cmake、git、gtest。
直接在vs code官网下载,这个不难。
注1:之前下载的那个版本不行,后面make的时候会出现不认识mutex的问题。这个问题的解决办法是在如下链接看到的:mingw64的posix版本详解 。
注2:一开始参考的这篇文章:Windows下如何安装MinGW,但是它的版本不对,所以不要按这个链接下载。但是可以按这个链接的添加环境变量的方式添加变量。
注3:浩哥在帮我解决报错的时候,把lib文件夹也加进去了,如下图:
注4: 添加完环境变量后需要重启下终端才能生效。
这时候就可以跑一个hello.cpp试试了。代码如下:
#include
int main(int argc, char* argv[])
{
printf( "hello world\n");
return 0;
}
注:上面是C语言的写法,C++使用iostream和std::cout。
跑通的界面如下图:
这时我发现了一个小问题,执行a.exe时很慢,并且右下角有弹窗,如下图:
解决方案是进入Windows 安全中心,如下图:
然后将云提供的保护关掉,如下图:
关了就好了。
参考链接是:Windows 10环境下如何安装CMake?(更新时间:2021.9.13)
注:安装好了后,用终端测试时,需要重新开终端。
安装好了的截图如下:
注:编译googletest的时候在终端用
cmake -G "MinGW Makefiles" ..
//这是cmake提供的方法,和cmake ..是一样的
注:在googletest里直接编译不行,得用cmake gui,见windows 下使用 cmake-gui 来编译第三方库的源代码
这里不行的原因可能是googletest比较大,里面有很多未知的东西,可能是某个文件导致了这条指令的失败。下面我们自己写的测试文件的CMakeLists.txt里,用cmake -G “MinGW Makefiles” …是可以的。 盲猜googletest里可能需要加更多的参数。
参考了如下的文档,基本都是默认配置,一路点击next即可:
win10系统Git安装教程『纯小白教程超详细』
这个最麻烦,参考了很多文档,请教了师父,最后总结出一份方法。随便找个目录(我找的是C:\Users\zhanghao\Downloads\code),打开终端。然后执行如下操作:
$ git clone https://github.com/google/googletest.git
$ cd googletest //进的是外层,里面还有一层googletest,里面那层用cmake gui会error,必须在这里做
$ mkdir build
$ cd build
$ 使用桌面的cmake gui做预编译。方法见上面。
$ mingw32-make //其实就是make
然后不需要install,在linux系统中,这步的目的是将C:\Users\zhanghao\Downloads\code\googletest\build\lib文件夹添加到/usr/local中,方便所有用户使用,这样就不用在CMkeLists.txt里增加这个库的链接。win10中可能也是同样的操作。但是我们手动做是一样的。
上述make了之后,就会在\googletest\build\lib里生产4个文件,我们需要的是其中2个二进制文件:libgtest.a和libgtest_main.a(如果自己写main函数,是需要的)。而另外2个文件是和mock相关的,我们不需要。这2个二进制文件才是我们要提取的gtest的精华。
方便起见,连同这4个文件一起,我们将这个lib拷贝走,总结步骤如下:
$ 在C:\Users\zhanghao\Downloads\code下新建kata文件夹。这才是我们最后写测试用例的地方。
$ 在kata里建一个3rd文件夹,将上述的\googletest\build\lib文件夹拷贝到3rd里。
$ 将\googletest\googletest\include文件夹拷贝到3rd里,如下图:
在kata文件夹里建好include和src文件夹,以及CmakeLists.txt,如下图:
接下来是很关键的写CmakeLists.txt文件。如下图:
源码见:
#设置cmake最小版本,要比本地的版本低。固定写法
cmake_minimum_required(VERSION 3.5)
#建一个project,取名叫kata
project(kata)
#设置cmake时要include的文件路径
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/3rd/include
${CMAKE_CURRENT_SOURCE_DIR}/include
)
#指定要链接的文件目录(这里并未执行链接)。因为lib下的.a文件都make过了,所以只需要链接一下即可。
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}/3rd/lib
)
#设置要编译的文件的名称,即src下面所有的.cpp文件都需要编译,他们整体取了个名字叫src_files
file(GLOB_RECURSE src_files
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
)
#将上述的src_files添加到可执行文件里,生产的可执行文件叫${PROJECT_NAME}。固定写法
add_executable(${PROJECT_NAME} ${src_files})
#告诉gcc去gtest这个目录(即link_directories)寻找lib库。(gtest这个名字是gcc取的)
target_link_libraries(${PROJECT_NAME} gtest)
这里也参考了单元测试其一:gtest。但是我没执行它的sudo make install,其余地方它的写法和我的方法也很像,但是它最后加了
add_test(
Test #测试名
mytest
)#关键!添加测试
正是因为它将gtest放在了cmake里,所以它最后的打印没有下图的run,ok这种结构:
另外的2篇文章应该也是可以用的,需要我好好研究:
编写完CMakeList后,还需要写测试用例,在下图的src目录下创建main.cpp和test.cpp文件:
其中,main.cpp的内容是:
#include "gtest/gtest.h"
int add(int a, int b)
{
return a + b;
}
//编写测试case
TEST(testCase, test1)
{
EXPECT_EQ(add(2, 4), 6); //判断结果是不是等于5,EXPECT_EQ表示 "等于"
}
int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
test.cpp的内容是:
#include "gtest/gtest.h"
int add2(int a, int b)
{
return a + b;
}
//编写测试case
TEST(testCase, test0)
{
EXPECT_EQ(add2(2, 3), 5); //判断结果是不是等于5,EXPECT_EQ表示 "等于"
}
然后再在\kata\build目录下打开cmd或者PowerShell(按shfit的同时右键)(注:不知道为啥git bash here不行,不能输出结果)。
执行如下命令:
cmake -G "MinGW Makefiles" ..
mingw32-make.exe
.\kata.exe
结果就出来了,如下图:
每次都要执行这3条指令好麻烦,在\kata\里写个build.bat,内容如下:
start cmd /k "cd build && cmake -G "MinGW Makefiles" .. && mingw32-make.exe && .\kata.exe"