如何对 vsix 项目进行单元测试?

Posted

技术标签:

【中文标题】如何对 vsix 项目进行单元测试?【英文标题】:How to unit test a vsix project? 【发布时间】:2018-06-04 13:10:28 【问题描述】:

我有一个 Visual Studio 扩展项目。它工作正常,构建到 vsix 并完成它的工作。我正在使用 VS2017

我想对其进行单元测试。我已经使用 MSTest v2 编写了单元测试。

问题是:当我尝试构建/运行测试项目时,出现一个错误,它没有找到 myProject.dll,显然是因为没有找到(myProject 构建为 .vsix 文件)。

如何对我的 vsix 项目进行单元测试?

编辑:调试它工作正常。 编辑 2:整个输出是 vsmanifest 文件和 .vsix 文件。安装和运行作品。

Tl;dr 的答案:无法测试 vsix。

【问题讨论】:

this thread 有帮助吗? 不幸的是,调试工作正常。只是无法对其进行单元测试。 【参考方案1】:

您的测试项目应该是 DLL 类型的文件。 例如,将其更改为“CS”类型的文件后,运行程序将能够运行您的测试

【讨论】:

“CS”是什么意思?项目文件是一个.csproj,源文件是.cs、packages.config和manifest文件(.vsixmanifest),输出是一个.vsix文件和manifest文件。我必须改变哪些? 我的意思是您的项目的输出类型需要是类库才能进行测试。您不能在 vsix 类型的项目上运行测试。 从技术上讲,项目属性中的输出类型 -> 应用程序是“类库”。所以您是说无法测试 vsix 项目? 我只是想复制你的情况,用单元测试项目制作了一个 VSIX 项目。它说当我尝试与 MsTestRunner 共进午餐时找不到 VSIXproject.dll。我默认使用 typemocks Isolator 作为运行器,它也无法运行它。据我所知,您不能对 VSIX 项目进行单元测试。如果可以,请将您的项目移动到不同的项目框架,例如 'classlibrary' ,它是 100% 可测试的。 这不是一个有效的答案。在 VS 2015 上,您可以使用 Visual Studio 中的 XUnit / NUnit / Basic Unit Tests 测试您的 VSIX 项目。不幸的是,这种方式在 VS 2017 和 VS 2019 的最新更新中不再可行。此时我正在尝试自己找到一种方法来使用最新版本的 Visual Studio 测试我自己的 VS 扩展。【参考方案2】:

所以我偶然发现了这篇文章。问题是 .dll 和 .pdb 文件位于 vsix 包中。所以要进行单元测试,它们也需要在它之外。

这表明 .csproj 文件中导入的目标存在错误:

<Import Project="$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" />

此目标在构建 vsix 时删除 dll 和 pdb。它不应该那样做。现在,vsix 只是一个具有特殊名称的 zip 文件。这样我们就可以解压了。

我在工具文件夹中的解决方案中添加了 7z.exe,并在构建后操作中运行它:

"$(SolutionDir)Tools\7z.exe" x -aoa "$(TargetDir)$(TargetName).vsix"

现在我的单元测试工作正常。

【讨论】:

所以呃...我有点离开了我构建 vsix 的公司,所以现在我实际上无法尝试您的解决方案。当我建立另一个时,我会回复你,已经有一些想法供个人使用和在我的新公司使用。感谢您提供一个似乎比另一个提供更多机会的答案:D 我也向微软提交了一份问题报告。我们会看到它的去向。最好的情况是他们修复了目标,以便在其中留下 dll 和 pdb 的副本,然后我们就不需要破解来解压缩。 或者他们让 msbuild/dotnet 变得足够聪明,可以将 vsix 识别为他们自己的并即时解压。或者,好吧,黑魔法。 你好,我偶然发现了你的问题和这个答案。我很欣赏您提到的方法,并且我有一个通过 MSBuildTaks 自动化它的想法。您是否有我可以自己跟踪的问题报告 ID/URL?我对干净的解决方案感兴趣,最好是来自 Microsoft 本身。 developercommunity.visualstudio.com/t/…

以上是关于如何对 vsix 项目进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何对私有 Cocoapods 库进行单元测试?

如何对剃刀视图进行单元测试

如何在C#中对单元测试性能优化进行单元测试?

如何对第一个Vue.js组件进行单元测试 (上)

使用 XCode 3 对 iPhone 静态库进行单元测试

如何使用 Firebase Cloud Firestore 对方法进行单元测试?