Qt:使用 Visual Studio 进行单元测试
Posted
技术标签:
【中文标题】Qt:使用 Visual Studio 进行单元测试【英文标题】:Qt : Unit Test with Visual Studio 【发布时间】:2018-08-28 06:05:15 【问题描述】:我有一个 Visual Studio 项目,想为它编写一些单元测试。 我尝试通过使用“本机单元测试项目”来做到这一点。 问题是,当我在测试中使用 QString 时,测试失败并显示以下消息:
消息:无法设置执行上下文来运行测试
关于如何使用 Qt 编写单元测试有什么建议吗?
#include "stdafx.h"
#include "CppUnitTest.h"
#include <QtCore/QCoreApplication>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace Test
TEST_CLASS(UnitTest1)
public:
TEST_METHOD(TestMethod1)
QString a = "Test";
Assert::IsTrue(true);
;
【问题讨论】:
您的问题实际上是“使用 Visual Studio 单元测试框架进行单元测试” 你可能想看看github.com/Microsoft/vstest/issues/1657 嗨乔纳斯,我已经尝试过你上面的例子,我能够编译单元测试。这些是我除了复制您的代码之外所做的以下更改。检查您的 QT 是使用 32 位还是 64 位编译器构建的。您需要在解决方案平台中进行相同设置。您需要在项目属性中添加包含目录路径和 lib 文件路径(Qt5Cored.lib)。要运行单元测试,您需要将 Qt5Cored.dll 文件复制到生成 exe 文件的文件夹中(编译后)。 @sonulohani 提交您的评论作为答案。 @UmNyobe,好的,谢谢 【参考方案1】:我已尝试使用您的上述示例,并且能够编译单元测试。这些是我除了复制您的代码之外所做的以下更改。
检查您的 QT 是使用 32 位还是 64 位编译器构建的。 您需要在解决方案平台中进行相同设置。 需要添加include目录路径和lib文件路径(Qt5Cored.lib(对于 debug)/Qt5Core.lib(for release)) 在项目属性中。 要运行单元测试,您需要复制 Qt5Cored.dll/Qt5Core.dll 文件位于生成单元测试 dll 文件的文件夹中(编译后)。PS:- 我使用的是 VS 2015,但这没关系。
【讨论】:
我尝试了您的解决方案,但遗憾的是它到目前为止还没有奏效。我必须在哪里复制 Qt5Core(d).dll?因为我开始测试时VS启动了testhost.exe,所以没有生成.exe文件。 嗨@Jonas,告诉我一件事。正如您所提到的,如果您使用 QString ,那么您的测试将失败。你确定吗?对不起,我提到 exe 的部分,它实际上是 dll 而不是 exe。同时您可以通过此链接:docs.microsoft.com/en-us/visualstudio/test/…,它将告诉您有关如何设置测试环境和运行测试的更多详细信息。【参考方案2】:我在使用 Qt Visual Studio Tools extension for Visual Studio 2019 创建的项目中也遇到了 Qt6 的这个问题。
QString 是构建过程中出现的错误之一,但还有更多错误。我的解决方案如下:
转到Microsoft Unit Testing Framework for C++项目的属性(右键单击解决方案,菜单“属性”的底部选项)
正如@sonulohani 的回复中提到的,我让它默认运行在 x64 中。
在Configuration Properties
> Linker
> General
Additional Library Directories
下,我在列表顶部添加了指向我的 QT 安装位置 libs 文件夹的路径(对我来说这是C:\Qt\6.1.2\msvc2019_64\lib
)。
在Configuration Properties
> Linker
> Input
Additional Dependencies
我添加了一个链接,指向来自同一个 QT 安装的所有“*.lib”文件(对我来说,这是C:\Qt\6.1.2\msvc2019_64\lib\*.lib
) AND 一个指向 Qt 项目的构建输出 .obj 文件的链接($(SolutionDir)<MY PROJECT NAME>\$(IntDir)*.obj
其中
按照@sonulohani 的建议仅复制 Qt6Core.dll/Qt6Cored.dll 不起作用。它仍然缺少东西。所以在属性中,Configuration Properties
> Build Events
> Post-Build Event
Command Line
我添加了这个脚本来复制所有Qt6 dll文件到测试项目.dll输出目录:
for %%f in (C:\Qt\6.1.2\msvc2019_64\bin\Qt6*.dll) do @copy /y %%f $(SolutionDir)$(Platform)\$(Configuration)\Tests\
现在我遇到了另一个问题,因为我的测试项目和我的实际 Qt 项目都将其文件转储到同一个输出目录中,而 Qt 项目不喜欢将所有这些 dll 放在那里并且不再运行.所以我在常规输出目录中创建了$(SolutionDir)$(Platform)\$(Configuration)\Tests\
目录,并将这个\Tests\ 子目录设置为测试项目的输出目录(Configuration Properties
> General
Output Directory
)。
【讨论】:
以上是关于Qt:使用 Visual Studio 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 2019 对 BizTalk 2020 人工制品进行单元测试会导致 Intellisense 问题
使用本机单元测试项目在 Visual Studio 2017 中对 C 代码进行单元测试
如何在 Visual Studio 2005 中进行单元测试?