在Visual Studio 2017 上对 C++ 代码进行测试

tech2024-12-11  4

在Visual Studio 2017 上对 C++ 代码进行测试

新建解决方案使用VS自带的UnitTest进行测试使用GTest进行测试 前言: 最近学习了一下GTest测试框架,抱着学习的态度想将其学会并用于平时的代码中,在稍微了解之后并在VS2017上准备使用GTest,结果花了一天多的时间来实现然后bug不断,最后发现非常简单。。。。果然,还是要学会采坑。 思路:网上搭建GTest测试框架有很多大佬使用“下载GTest——编译为静态库——项目内调用”这样的方式,新手使用起来太麻烦了,经过了解之后,VS2017(及以上版本)其实已经支持直接手动使用GTest测试框架了,而且它还自带了其单元测试框架UnitTest,不过VS官网的支持文档确实感觉太过复杂和繁琐了,不过也值得看看(有意向的小伙伴可以去看官网:在 Visual Studio 中编写 C/C++ 单元测试)。 结果:本文可以教会你在几分钟之内就可以在VS2017上使用C++测试框架。

新建解决方案

首先,直接建立自己的解决方案(也就是项目),这里我的项目是LearningOfC++UnitTest: 然后,添加自己的类和内部函数(这里只是为了测试使用): 其中,Node.h和Node.cpp的代码为:

#pragma once class Node { public: int ID; Node(); Node(int x); ~Node(); }; #include "pch.h" #include "Node.h" Node::Node() { ID = 1; } Node::Node(int x) { ID = x; } Node::~Node() { }

到这里,我们做好了一个需要测试的例子,即测试Node类的两个构造函数。

使用VS自带的UnitTest进行测试

接下来为LearningOfC++UnitTest项目添加UnitTest测试项目: 1、右键解决方案——添加——新建项目——测试——本机单元测试项目UnitTest1; 2、在UnitTest1的引用中,右键引用——添加引用——勾选LearningOfC++UnitTest;(注,这里的测试项目只能勾选解决方案内的其它项目) 3、在unittest.cpp文件中,键入#include “…/” ——选择"…/LearningOfC++UnitTest/Node.h"(对应的头文件); 4、输入测试的代码,我这里测试的是Node类的构造函数; 5、重新生成解决方案; 这里提示报错!!!:

2>unittest1.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Node::Node(void)" (??0Node@@QAE@XZ),该符号在函数 "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@1@QAEXXZ) 中被引用 2>unittest1.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Node::Node(int)" (??0Node@@QAE@H@Z),该符号在函数 "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@1@QAEXXZ) 中被引用 2>unittest1.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Node::~Node(void)" (??1Node@@QAE@XZ),该符号在函数 "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@1@QAEXXZ) 中被引用

这个问题我花了好久的时间去弄,最后面根据博客:VC++常见错误原因解析之error LNK2019: 无法解析的外部符号 "public: void __thiscall,我试探性的把Node.cpp也Include进去,竟然就可以了。。。。。 6、在unittest.cpp文件中,键入#include “…/” ——选择Node.cpp(将头文件和源文件都include在内); 7、再次重新编译,最后成功了!

8、运行测试,点击测试——运行——所有测试; 9、打开测试资源管理器查看测试结果,测试——窗口——资源管理器; 右边显示一个测试通过了,与实际是相符的,到此,已经成功的使用完成UnitTest。

使用GTest进行测试

1、右键解决方案——添加——新建项目——测试——Google Test Sample-Test1;

2、配置测试项目Sample-Test1,选择LearningOfC++UnitTes,这里只有选择测试的项目即可,其它的为默认值; 查看引用,如果再“测试项目配置”中没有选择项目,在引用中还是可以添加项目的: 3、在test.cpp中,将Node.h和Node.cpp都include进来,并编写测试代码,这里测试的代码与UnitTest测试的代码内容一样,都是测试Node类的构造函数; 4、重新生成解决方案,运行所有测试:测试——运行——所有测试; 输出窗口可以看到: 5、打开测试资源管理器,查看所有测试结果: 右侧显示通过两个测试,即UnitTest和Gtest的测试都通过了,到此,已经成功地使用完成GTest。

从此以后,可以开心的使用测试框架来测试了,>.<。

最新回复(0)