繁体   English   中英

在 Visual Studio 的 Linux docker 容器中调试 nunit 测试

[英]Debug nunit tests in a Linux docker container from Visual Studio

我正在尝试将我们的 .NET Core 3.0 应用程序更改为在 Linux 容器中运行。 我已经到了可以在容器中恢复和构建的地步,但是测试失败了,这是意料之中的。 应用程序中的某些内容仅适用于 Windows 机器。

我想在 Windows 上的 Visual Studio 中调试容器内的测试,但还不能这样做。 根据我的阅读,似乎没有办法通过运行 dotnet 测试来调试测试。 运行 nunit-console 似乎有可能,但我无法运行,因为它会抛出UnsupportedFrameworkException ,因为我们使用的是 nunit 3.12.0。

有什么办法可以做我想做的事吗? 我也很想听听有关完成相同任务的方法,但使用不同的单元测试框架,我不会因为任何特定原因而与 nunit 绑定。

我正在为我的容器使用 mcr.microsoft.com/mssql/server:2019-latest,它是 ubuntu 16.04。

您可以使用 .NET Core SDK Linux 容器运行您的测试(Z303CB0EF9EDB9082AZD61BBBE582 版本)

   docker pull mcr.microsoft.com/dotnet/core/sdk:3.1

我建议使用单元测试源代码作为卷安装驱动器,然后将工作目录设置为单元测试 output 路径,其中测试 DLL。 Assuming your source code is on D drive and you build output d:\src\acmeproject\acmetests\bin\Debug\netcoreapp3.1\acmetests.dll the command line to run tests on Linux could go like

docker run --rm -v d:\:/mnt/d/ -w /mnt/d/src/acmeproject/acmetests/bin/Debug/netcoreapp3.1 mcr.microsoft.com/dotnet/core/sdk:3.1 dotnet test acmetests.dll

请参阅有关按 class 名称、方法名称等过滤的dotnet 测试命令的更多信息。

要调试,您必须在 Linux VSTEST_HOST_DEBUG=1 上定义环境变量。 因此,调试特定单元测试的命令行可以像 go

docker run --rm --name AcmeUnitTest -e VSTEST_HOST_DEBUG=1 -v d:\:/mnt/d/ -w /mnt/d/src/acmeproject/acmetests/bin/Debug/netcoreapp3.1 mcr.microsoft.com/dotnet/core/sdk:3.1 dotnet test acmetests.dll --filter Name~AcmeTestMethod

运行后,它将打印可用于从 Visual Studio 附加到 AcmeUnitTest Linux 容器特定进程的进程 ID。 Select 在“附加到进程”对话框中“连接类型”为“Docker(Linux 容器)”。

此外,为了能够在 Linux 上进行调试,您必须确保程序集的 CSPROJ 文件(包括测试程序集)使用新的可移植 PDB 格式。 否则,您的 DLL 调试信息将无法加载。 请注意,新 CSPROJ 文件中“DebugType”的默认值为“便携式”。 因此,您可以删除带有“DebugType”的行或如下所述进行编辑。

<DebugType>portable</DebugType>

我希望我们很快就会将此作为 Visual Studio 中的集成功能,而不必手动执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM