主要介绍两种为VisualStudio的C++项目创建单元测试的方法:
微软的本机单元测试
、
Google Test
。
VisualStudio自带的有一个C++本机单元测试,其框架主要原理是生成一个动态库文件,测试的函数作为DLL的导出函数由框架进行调用测试。
然而实际使用下来体验并不是很好,不过还是简单说下怎么使用。
在解决方案下右键菜单-添加-新建项目,搜索C++项目里的“
本机单元测试项目
”
具体可以参考微软官方介绍:
编写适用于 C/C++ 的单元测试 - Visual Studio | Microsoft Docs
测试发现对于简单的demo小程序没有什么问题,但是对于半路接入单元测试的复杂点的项目就暴露了各种问题(当然最好在项目最初就接入单元测试)。
另外实测发现:
测试项目必须引入带测试项目的lib和.obj
,某些博客说不用链接,实测不行。
还是参考微软官方介绍:
编写 C++ DLL 单元测试 - Visual Studio | Microsoft Docs
单元测试必须调用不导出的非成员函数,并且代码必须生成为动态链接库 (DLL): 在同一项目中添加单元测试作为产品代码。
转到过程在同一项目中添加单元测试的具体步骤。
这个看上去挺适合自己目前的项目的,然而接入下来并不理想,问题后面一并总结。
-
配置繁琐
-
好不容易配置成功,测试出现问题,其中无法执行测试是最常见的:
Failed to set up the execution context to run the test.
参考网上的介绍说是,测试DLL所依赖的项目或三方DLL缺失,使用depends查看依赖关系 配置完全后仍然无法运行(测试demo可以,复杂点项目不行)。放弃。
使用下来发现Google Test要简单的多,可以参考微软官方文档:
如何使用适用于 C++ 的 Google Test - Visual Studio | Microsoft Docs
这里说下需要注意的地方,因为C++项目一般使用静态链接库的方式,所以在创建Google Test项目的时候,选项需要注意。
- 将Google Test用作,选择默认的“静态库(.lib)”即可;
- C++运行时库选择:静态链接(也就是MT/MTd),否则就选择:动态链接(推荐)(也就是MD/MDd)。
- 选择要测试的项目(可选):这个勾选要测试的项目名,也可以不选。
在测试项目的属性-链接器-输入-附加依赖项里,配置:…\temp\XXXX\Win32\Debug*.obj
在测试项目的属性-链接器-常规-附加库目录,配置需要链接的三方lib的目录,这个是和被测试项目的配置一致。
编写测试代码:
#include "pch.h"
#include "../XXXX/XXX.h"
TEST(TestCaseName, TestName) {
EXPECT_EQ(1, 1);
EXPECT_TRUE(true);
ASSERT_STREQ(_T("xxx.xxx"), _T("xxx.xxx"));
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
更多使用方法可以参考:googletest/primer.md at master · google/googletest
- 两种方法都需要引入被测试项目的lib和obj,其中obj可用相对路径加*.obj的方式引入;
- 微软自带本机测试项目生成的是dll形式,不方便;而Google Test生成的是exe形式,方便。
- 微软自带本机测试项目问题较多,特别是Failed to set up the execution context to run the test难以解决。
- Google Test总体配置更简单,问题更少,可以根据项目属性自由选择:静态链接或动态链接;
- Google Test测试项目生成的是exe类型的可执行文件,添加上述的main函数还可以单步调试跟踪,一旦测试出问题可以很方便调试解决。
在Visual Studio Code中为新的C ++项目快速设置cpp-boilerplate在Visual Studio Code中为新的C ++项目快速设置。
仅Linux。
它是在Ubuntu 18.04上创建并测试的。如何使用安装Visual Studio代码安装远程-容器扩展克隆此项目并在VS Code中打开在命令面板中找到并单击“远程容器:在容器构建项目中重新打开”,其任务为:运行构建任务命令使用以下命令重新启动clangd:如果找不到包含文件,则重新启动clangd语言服务器命令功能VS Code inte
Visual Studio 集成开发环境 (IDE) 提供了一组工具,可帮助您编写和修改代码,以及检测和更正错误。
在这些主题中,您将创建一个新的标准 C++ 程序,并使用 Visual Studio 为 C++ 开发人员提供的功能测试该程序的功能。
本演练涵盖以下内容:
演练:使用项目和解决方案 (C++)
演练:生成项目 (C++)
演练:测试项目 (C++)
演练:调试项目 (C++)
演练:部署程序 (C++)
拷贝文件到gRPC_Server所在的目录中
D:\GRPCProject\gRPC_Project\grpc\examples\protos 中 helloworld.proto
D:\GRPCProject\gRPC_Project\grpc\examples\cpp\helloworld中greeter_client.cc 和 greeter_server.cc
D:\GR
(1)使用vs建立动态库项目时要选择windows桌面开发向导,选动态库,空项目
(2)要在函数前加导出函数的宏定义__declspec(dllexport)
实例一:每个函数定义前都加该宏定义
__declspec(dllexport)
int cltSocketInit(void **handle)
实例二:建成头文件,加在函数声明前
__declspec...
APP这个项目和Dll_Try建立在一起:在解决方案’Dll_Try’上右击,选择添加新项目,选择Windows控制台项目。
APP是Windows控制台项目,用来测试制作的动态链接库。Dll_Tr...
单元测试,那些似乎从来都不怎么有用的软件工程教科书里有关于它的确切定义。在本文中,只是将其视为检验某个函数是否正确的一种手段。可将单元测试想象为质检员,将要检验的函数想象为待出厂的零件。
例如,我想检验我实现的双向链表容器 PmList 的 pm_list_append 函数,我可以为它写一个测试程序:
#include <...
QTestLib框架提供了一个简单易用的单元测试框架,需要在工程文件中添加Qt+=testlib,或在新建项目是选择“其他项目-qt单元测试”,详细帮助请看qt4.8官方文档,Qt5官方文档
class Untitled2Test : public QObject {
Q_OBJECT
public:
Untitled2Test();
private...
Test comes first!Visual Studio上的项目中一般有几种类型的工程,静态库(.lib), 动态库(.dll)以及我们的主工程(.exe), 每个工程里都分布着许多类,现在在写代码时要对这些类做一些单元测试, 我使用的Unit Test框架还是google test。挑战:如果一个类部署在dll中,则对应的该类单元测试显然也放在这个dll中比较好,但是要运行单元
2) 创建测试类:需要继承自QObject(因为要用去信号-槽)。
3) 创建测试条目:所有的private slots下函数都将作为测试条目自动测试,并需要一个_data()函数提供数据。
4) 创建测试数据:QTest::
你有没有这样的经历:明白测试对提升软件质量的重要性,着手进行编写测试代码的时候,发现
1. 单元耦合过多,使用一个类往往要牵扯到比自己预想的多其他类,写不出设想中的简洁的测试代码,影响测试的心情与决心。
2. 无法确定合适的测试颗粒度。如果每个类都做单元测试,整体的代码量会提高很多,所需的时间提升,不能满足项目工期的要求。
针对在测试中遇到的问题,《大规模C++程序设计》的作者John Lakos 给出了自己的解决方案。
编写可测试的代码
John Lakos指出:代码的可测试性在代码编写之前