Windows搭建基于EClipse的CppUTest单元测试环境

本文详细介绍如何在Win10环境下使用Eclipse进行CppUTest单元测试,包括Cygwin安装、CppUTest库编译、Eclipse配置等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章介绍如何在 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

image-20210717205610146

32位离线版本(文末有下载链接):

image-20210717205858342

我们这里使用 32 位的版本

2. 安装Cygwin

2.1 安装

按照以下步骤进行安装:

image-20210717210348462

  • 选择从本地安装

image-20210717210428972

  • 设置安装路径

image-20210717210500398

  • 选择本地包路径

image-20210717210549791

  • 等待提取包

image-20210717210609274

  • 勾选安装 Devel

这里的离线包是在线安装自动下载的,因为在线安装只勾选了 Devel ,其它都为默认,所以这里也只勾选 Devel

image-20210717210743575

  • 确认修改,直接下一步

image-20210717210929138

  • 等待安装完成(这个过程很久,大概需要20分钟

image-20210717210942844

  • 安装快要结束的时候可能会收到几个错误,点击确认即可

image-20210717213428943

  • 安装完成

image-20210717213644742

  • 图标

image-20210717213819398

2.2 配置 Path

  • 在系统环境变量中添加 cygwin 的路径

image-20210717213928498

  • 测试是否添加成功

在命令行键入:cmake --version

出现版本,代表配置成功:

image-20210717214454689

3. 编译CppUTest

3.1 下载 CppUTest

CppUTest 官网:http://cpputest.github.io/

GitHub 地址:https://github.com/cpputest/cpputest

  • 先下载 CppUTest

image-20210717213520033

  • 解压

image-20210717213624745

3.2 编译 CppUTest

  • 切换到 cpputest-master/cpputest_build 目录:

image-20210717214634659

  • 使用 cmake 生成 Makefile

image-20210717214732164

image-20210717214751605

  • 使用 make 命令进行编译

image-20210717214837361

  • 编译完成

image-20210717215538767

  • 查看 cygwin/usr/local/lib 目录内容

image-20210717215003568

  • 使用 make install 命令进行安装

image-20210717215602644

image-20210717215635998

  • 拷贝cygwin/usr/local/libcpputest-master

image-20210717215734734

3.2 添加 CPPUTEST_HOMEPath

image-20210717215854671

  • 效果

image-20210717215913747

这个路径在之后的 EClipse 工程中会用到。

4. 安装 EClipse C/C++ 开发环境

因为 EClipse 需要使用 java 环境 所以我们先安装 JDK

4.1 安装JDK

java JDK下载地址:https://www.oracle.com/cn/java/technologies/javase-jdk15-downloads.html

image-20210717221506852

  • 下载完成

image-20210717221538281

  • 双击安装,一直下一步就可以了

image-20210717221611090

  • 测试是否安装成功

image-20210717221639735

4.2 下载 Eclipse IDE for C/C++ Developers

下载地址:https://www.eclipse.org/downloads/packages/

image-20210717222455929

  • 我们这里选择 x86_64 进行下载:

image-20210717222758841

  • 解压,绿色包,可直接使用

image-20210717222846450

  • 打开软件

image-20210717222903081

4.3 设置工作区

image-20210717223021264

5. 创建 Cygwin C++工程

5.1 新建默认工程

  • 新建工程

image-20210717223122215

  • 选择工程类型,设置工程名称,选择编译环境

image-20210717223247035

  • 创建完成

image-20210717223339303

  • 设置字体大小

image-20210717223511241

image-20210717223528819

设置为14,字体即变大:

image-20210717223601041

  • Ctrl + B 编译工程

image-20210717223647143

  • 运行

image-20210717223725709

image-20210717223741107

5.2 添加自己的内容

我们将在工程中添加自己的以下 4 个文件(供下一小节单元测试用):

  • Example1.cpp

  • Example1.h

  • Example2.cpp

  • Example2.h

  • 首先添加两个文件夹 sourceheader

image-20210717224019492

image-20210717224152946

  • 添加 header 到工程头文件目录:

image-20210717224607186

  • 添加 sourceheader 到工程路径:

image-20210717225426355

  • 添加头文件到 header ,添加源文件到 source

image-20210717225503091

添加完成:

image-20210717225645742

  • 文件内容如下:

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;
}

测试成功:

image-20210717230432841

6. 添加 CppUTest 单元测试工程

6.1 创建空工程

  • 添加 C/C++ 工程

image-20210717230958935

image-20210717231022931

  • 选择 Empty Project

image-20210717231102578

  • 创建完成

image-20210717231150502

6.2 为工程添加单元测试环境

前提: 需要添加 CPPUTEST_HOME 路径到 Path ,参考 3.3 小节。

  • 添加 Cygwin C++ Compiler 头文件目录
# Include paths (-l)
"${CPPUTEST_HOME}/include"

image-20210717231854182

  • 添加 Cygwin C Compiler 头文件目录
# Include paths (-l)
"${CPPUTEST_HOME}/include"

image-20210717231922204

  • 添加 Cygwin C++ Linker 引用库目录
# Libraries (-l)
CppUTest

# Library search path (-L)
"${CPPUTEST_HOME}/lib"

image-20210717231956634

6.3 添加单元测试入口

  • 添加文件之前,我们先添加文件夹目录

image-20210717232136123

  • 设置路径名称

image-20210717232207163

  • 添加测试入口文件 TestsMain.cpp
#include "CppUTest/CommandLineTestRunner.h"

int main(int ac, char** av)
{
    /* 这些检查是为了确保测试运行之外的断言不会崩溃  */
    CHECK(true);
    LONGS_EQUAL(1, 1);

    return CommandLineTestRunner::RunAllTests(ac, av);
}
  • 编译 单元测试工程

image-20210717232929009

  • 运行单元测试结果

image-20210717233002793

由于没有添加其它的测试,所以这里结果都为 0

image-20210717233032213

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");
}

我们看到工程报错了,提示找不到头文件:

image-20210717234012369

先不管,我们继续添加 Example2 的单元测试:

image-20210717234252714

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 工程中引入待测试文件

  • 添加链接文件夹

image-20210717234419826

  • 链接 source 文件夹

image-20210717234512255

  • 链接 header 文件夹

image-20210717234547293

  • 链接完成,工程就不再报错了

image-20210717234652385

image-20210717234609619

  • 不过此时,还需要为工程添加头文件路径

image-20210717234847863

  • 重新编译,并运行

image-20210717234922194

  • 修改一个,使故意出错

image-20210717235004972

  • 编译运行

image-20210717235037001

7. 配置CppUTest图形化插件

刚才,我们看到,测试的结果都是以文字显示的,不太美观,在接下来的时间里,我将和大家一起添加图形化测试插件。

7.1 下载插件

工具下载地址:https://github.com/tcmak/CppUTestEclipseJunoTestRunner

image-20210717235415015

下载完成:

image-20210717235354584

查看需要用到的文件:

image-20210718000810696

7.2 添加插件

  • eclipse/dropins 路径下添加文件夹 CppUTest :

image-20210718000905808

  • 复制内容到 CppUTest

image-20210718001031400

7.3 使用插件

重新打开 eclipse,添加 New Launch Configuration

image-20210718001243821

  • 选择 C/C++ Unit

image-20210718001324983

  • Main 设置

image-20210718001356990

  • C/C++ Testing 选择 CppUTest Tests Runner

image-20210718001430767

  • 切换到 unit_test Debug 点击 Run 运行:

image-20210718001559051

  • Example2FAIL 断言取消,重新测试:

image-20210718001657863

至此,本篇文章结束:

8. 参考资料

Cpputest 官网:http://cpputest.github.io/index.html

文章所需文件下载地址:

链接:https://pan.baidu.com/s/1yyYSo7W0sYFzlf_No43Y2Q 
提取码:0tvh 

image-20210718002208010

文章配套工程下载地址:https://download.youkuaiyun.com/download/u014779536/20352402

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值