文章目录
本篇文章介绍如何在 win10
环境上使用 EClipse
进行 CppUTest
单元测试,文章将从每一个软件安装、CppUTest
库编译、EClipse
配置详细进行介绍。
本篇文章所需用到的离线安装包
,在文末都有下载地址。
1. Cygwin介绍及下载
因为我们要在 windows
环境里面编译 CppUTest
库,所以我们需要安装 Cygwin
。
- 软件介绍
Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,运行UNIX类系统。Cygwin的主要目的是通过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软件移植到Windows上。Cygwin移植工作在Windows NT、Windows 2000、Windows XP以及Windows Server 2003上比较好,在Windows 95和Windows 98上,相对差劲一些。目前Cygwin由Red Hat等负责维护。
Cygwin包括了一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集(比如GCC、GDB),这样可以进行简单的软件开发;还有一些UNIX系统下的常见程序。2001年,新增了X Window System。
另外还有一个名为MinGW的库,可以跟Windows本地的MSVCRT库(Windows API)一起工作。MinGW占用内存、硬盘空间都比较少,能够链接到任意软件,但它对POSIX规范的实现没有Cygwin库完备。
- 软件下载(在线安装+离线安装)
下载地址:https://cygwin.com/install.html
32位离线版本(文末有下载链接):
我们这里使用 32 位的版本
2. 安装Cygwin
2.1 安装
按照以下步骤进行安装:
- 选择从本地安装
- 设置安装路径
- 选择本地包路径
- 等待提取包
- 勾选安装
Devel
这里的离线包是在线安装自动下载的,因为在线安装只勾选了 Devel
,其它都为默认,所以这里也只勾选 Devel
。
- 确认修改,直接下一步
- 等待安装完成(这个过程很久,大概需要20分钟)
- 安装快要结束的时候可能会收到几个错误,点击确认即可
- 安装完成
- 图标
2.2 配置 Path
- 在系统环境变量中添加
cygwin
的路径
- 测试是否添加成功
在命令行键入:cmake --version
出现版本,代表配置成功:
3. 编译CppUTest
3.1 下载 CppUTest
CppUTest
官网:http://cpputest.github.io/
GitHub
地址:https://github.com/cpputest/cpputest
- 先下载 CppUTest
- 解压
3.2 编译 CppUTest
- 切换到
cpputest-master/cpputest_build
目录:
- 使用
cmake
生成Makefile
:
- 使用
make
命令进行编译
- 编译完成
- 查看
cygwin/usr/local/lib
目录内容
- 使用
make install
命令进行安装
- 拷贝
cygwin/usr/local/lib
到cpputest-master
3.2 添加 CPPUTEST_HOME
到 Path
- 效果
这个路径在之后的 EClipse
工程中会用到。
4. 安装 EClipse C/C++
开发环境
因为 EClipse
需要使用 java
环境 所以我们先安装 JDK
。
4.1 安装JDK
java JDK下载地址:https://www.oracle.com/cn/java/technologies/javase-jdk15-downloads.html
- 下载完成
- 双击安装,一直下一步就可以了
- 测试是否安装成功
4.2 下载 Eclipse IDE for C/C++ Developers
下载地址:https://www.eclipse.org/downloads/packages/
- 我们这里选择
x86_64
进行下载:
- 解压,绿色包,可直接使用
- 打开软件
4.3 设置工作区
5. 创建 Cygwin C++工程
5.1 新建默认工程
- 新建工程
- 选择工程类型,设置工程名称,选择编译环境
- 创建完成
- 设置字体大小
设置为14,字体即变大:
Ctrl + B
编译工程
- 运行
5.2 添加自己的内容
我们将在工程中添加自己的以下 4 个文件(供下一小节单元测试用):
-
Example1.cpp
-
Example1.h
-
Example2.cpp
-
Example2.h
-
首先添加两个文件夹
source
和header
:
- 添加
header
到工程头文件目录:
- 添加
source
和header
到工程路径:
- 添加头文件到
header
,添加源文件到source
:
添加完成:
- 文件内容如下:
Example1.h
:
#ifndef EXAMPLE1_H_
#define EXAMPLE1_H_
int example1(void);
#endif /* EXAMPLE1_H_ */
Example1.cpp
:
#include "Example1.h"
int example1(void)
{
return 1;
}
Example2.h
:
#ifndef EXAMPLE2_H_
#define EXAMPLE2_H_
int example2_sum(int a, int b);
#endif /* EXAMPLE2_H_ */
Example2.cpp
:
#include "Example2.h"
int example2_sum(int a, int b)
{
return a+b;
}
5.3 在 main 函数测试添加的内容
//============================================================================
// Name : myCppDemo.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include "Example1.h"
#include "Example2.h"
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
cout << "Example1 Test:" << example1() << endl;
cout << "Example2 Test: 2+3 = " << example2_sum(2,3) << endl;
return 0;
}
测试成功:
6. 添加 CppUTest 单元测试工程
6.1 创建空工程
- 添加 C/C++ 工程
- 选择
Empty Project
- 创建完成
6.2 为工程添加单元测试环境
前提: 需要添加 CPPUTEST_HOME
路径到 Path
,参考 3.3
小节。
- 添加
Cygwin C++ Compiler
头文件目录
# Include paths (-l)
"${CPPUTEST_HOME}/include"
- 添加
Cygwin C Compiler
头文件目录
# Include paths (-l)
"${CPPUTEST_HOME}/include"
- 添加
Cygwin C++ Linker
引用库目录
# Libraries (-l)
CppUTest
# Library search path (-L)
"${CPPUTEST_HOME}/lib"
6.3 添加单元测试入口
- 添加文件之前,我们先添加文件夹目录
- 设置路径名称
- 添加测试入口文件
TestsMain.cpp
#include "CppUTest/CommandLineTestRunner.h"
int main(int ac, char** av)
{
/* 这些检查是为了确保测试运行之外的断言不会崩溃 */
CHECK(true);
LONGS_EQUAL(1, 1);
return CommandLineTestRunner::RunAllTests(ac, av);
}
- 编译 单元测试工程
- 运行单元测试结果
由于没有添加其它的测试,所以这里结果都为 0
:
6.4 添加 Example
的单元测试
文件名称:Example1Test.cpp
文件内容:
#include "CppUTest/TestHarness.h"
#include "Example1.h"
//如果是C语言的头文件,则放入此
extern "C"
{
}
/* 使用名称 FirstTest 声明 TestGroup */
TEST_GROUP(Example1)
{
/* 为测试组声明一个设置方法。 可选的。 */
void setup ()
{
}
/* 为测试组声明一个拆卸方法。 可选的 */
void teardown()
{
}
}; /* 不要忘记了分号 */
/* 声明测试组Example1中的一个测试 */
TEST(Example1, test_example)
{
/* 检查两个数是否相等 */
LONGS_EQUAL(1, example1());
/* 检查条件是否为真 */
CHECK(true == true);
/* 检查字符串是否相等 */
STRCMP_EQUAL("HelloWorld", "HelloWorld");
}
我们看到工程报错了,提示找不到头文件:
先不管,我们继续添加 Example2 的单元测试:
Example2.cpp
#include "CppUTest/TestHarness.h"
#include "Example2.h"
extern "C"
{
}
TEST_GROUP(Example2)
{
void setup()
{
}
void teardown()
{
}
};
TEST(Example2, test_sum)
{
int x = 1;
int y = 2;
LONGS_EQUAL( x+y , example2_sum(x,y));
}
6.5 在 unit_test 工程中引入待测试文件
- 添加链接文件夹
- 链接
source
文件夹
- 链接
header
文件夹
- 链接完成,工程就不再报错了
- 不过此时,还需要为工程添加头文件路径
- 重新编译,并运行
- 修改一个,使故意出错
- 编译运行
7. 配置CppUTest图形化插件
刚才,我们看到,测试的结果都是以文字显示的,不太美观,在接下来的时间里,我将和大家一起添加图形化测试插件。
7.1 下载插件
工具下载地址:https://github.com/tcmak/CppUTestEclipseJunoTestRunner
下载完成:
查看需要用到的文件:
7.2 添加插件
- 在
eclipse/dropins
路径下添加文件夹CppUTest
:
- 复制内容到
CppUTest
:
7.3 使用插件
重新打开 eclipse
,添加 New Launch Configuration
:
- 选择
C/C++ Unit
Main
设置
C/C++ Testing
选择CppUTest Tests Runner
:
- 切换到
unit_test Debug
点击Run
运行:
- 将
Example2
的FAIL
断言取消,重新测试:
至此,本篇文章结束:
8. 参考资料
Cpputest 官网:http://cpputest.github.io/index.html
文章所需文件下载地址:
链接:https://pan.baidu.com/s/1yyYSo7W0sYFzlf_No43Y2Q
提取码:0tvh
文章配套工程下载地址:https://download.youkuaiyun.com/download/u014779536/20352402