文档彩票走势图>>Visual Studio系列教程>>Visual Studio 使用教程:如何编写C ++ DLL的单元测试(上)
Visual Studio 使用教程:如何编写C ++ DLL的单元测试(上)
Visual Studio是功能完备的 IDE,可用于编码、调试、测试和部署到任何平台,Visual Studio使用 .NET 开发 iOS、Android 和 Web 应用和游戏。
本演练介绍如何使用测试优先方法开发本机C ++ DLL。(点击此处到达下部分内容)。基本步骤如下:
- 创建一个本机测试项目。测试项目与DLL项目位于同一解决方案中。
- 创建一个DLL项目。本演练将创建一个新的DLL,但是测试现有DLL的过程是相似的。
- 使DLL函数对测试可见。
- 迭代地扩充测试。建议一个“红色-绿色-重构”循环,其中代码的开发由测试主导。
- 调试失败的测试。您可以在调试模式下运行测试。
- 重构,同时保持测试不变。重构意味着在不更改其外部行为的情况下改进代码的结构。您可以这样做以提高代码的性能,可扩展性或可读性。因为目的不是要更改行为,所以在对代码进行重构更改时,请勿更改测试。这些测试有助于确保重构时不会引入错误。
- 检查覆盖范围。当单元测试使用更多的代码时,它们会更加有用。您可以发现测试已使用了代码的哪些部分。
- 将单元与外部资源隔离。通常,DLL依赖于您正在开发的系统的其他组件,例如其他DLL,数据库或远程子系统。将每个单元与其依赖项隔离开来测试很有用。外部组件会使测试运行缓慢,在开发过程中,其他组件可能不完整。
创建一个本机单元测试项目
- 在“文件”菜单上,选择“新建”>“项目”。
- Visual Studio 2017及更早版本:展开已安装>模板> Visual C ++>测试。Visual Studio 2019:将语言设置为C ++,然后在搜索框中键入"测试''。
- 选择本机单元测试项目模板,或您喜欢的任何已安装框架。如果您选择其他模板(例如Google Test或Boost.Test),则基本原理相同,尽管某些细节有所不同。
- 在本演练中,测试项目名为NativeRooterTest。
- 在新项目中,检查unittest1.cpp。
注意:
- 通过使用TEST_METHOD(YourTestName){...}定义每个测试。 您不必编写常规的函数签名,签名是由宏TEST_METHOD创建的。宏生成一个实例函数,该函数返回void。它还生成一个静态函数,该函数返回有关测试方法的信息。该信息使测试浏览器可以找到该方法。
- 使用TEST_CLASS(YourClassName){...}将测试方法分组为类。 运行测试时,将创建每个测试类的实例。测试方法的调用顺序不确定。您可以定义在每个模块,类或方法之前和之后调用的特殊方法。
- 验证测试是否在“测试资源管理器”中运行:
- 插入一些测试代码:
TEST_METHOD(TestMethod1) { Assert::AreEqual(1,1); }
请注意,Assert类提供了几种静态方法,可用于验证测试方法中的结果。
-
在“测试”菜单上,选择“运行”>“所有测试”,测试生成并运行,出现“测试资源管理器”,该测试将显示在“通过的测试”下。
创建一个DLL项目
以下步骤显示如何在Visual Studio 2019中创建DLL项目。
- 使用Windows桌面向导创建C ++项目:在解决方案资源管理器中右键单击解决方案名称,然后选择“添加”>“新建项目”。 将语言设置为C ++,然后在搜索框中键入“ windows”。 从结果列表中选择Windows桌面向导。 在本演练中,该项目名为RootFinder。
-
按创建。在下一个对话框的“应用程序类型”下,选择“动态链接库(dll)”,然后选中“导出符号”。
导出符号选项会生成一个方便的宏,可用于声明导出的方法。
- 在主体.h文件中声明一个导出的函数:
声明符__declspec(dllexport)使该类的公共成员和受保护成员在DLL外部可见。
- 在主体.cpp文件中,为该函数添加一个最小主体:
// Find the square root of a number. double CRootFinder::SquareRoot(double v) { return 0.0; }
将测试项目耦合到DLL项目
- 将DLL项目添加到测试项目的项目引用中:
- 在解决方案资源管理器中右键单击测试项目节点,然后选择“添加”>“引用”。
- 在“添加引用”对话框中,选择DLL项目,然后选择“添加”。
- 在主体单元测试.cpp文件中,包括DLL代码的.h文件:
#include "..\RootFinder\RootFinder.h"
- 添加使用导出功能的基本测试:
TEST_METHOD(BasicTest) { CRootFinder rooter; Assert::AreEqual( // Expected value: 0.0, // Actual value: rooter.SquareRoot(0.0), // Tolerance: 0.01, // Message: L"Basic test failed", // Line number - used if there is no PDB file: LINE_INFO()); }
- 构建解决方案。 新测试将出现在“测试资源管理器”中。
- 在测试资源管理器中,选择“全部运行”。
您已经设置了测试和代码项目,并确认可以运行在代码项目中运行功能的测试。现在您可以开始编写实际的测试和代码。
本文内容较多,分为上下两部分进行介绍,(点击此处到达下部分内容)。
想要购买Visual Studio正版授权,或了解更多产品信息请点击