您可以使用 .NET Core SDK Linux 容器来运行测试(.NET Core 3.1 版本)
docker pull mcr.microsoft.com/dotnet/core/sdk:3.1
我建议使用单元测试源代码作为卷安装驱动器,然后将工作目录设置为测试 DLL 所在的单元测试输出路径。假设您的源代码位于 D 驱动器上,并且您构建输出 d:\src\acmeproject\acmetests\bin\Debug\netcoreapp3.1\acmetests.dll,则在 Linux 上运行测试的命令行可能如下所示
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
查看更多关于点网测试 https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-test按类名、方法名等进行过滤的命令
要调试,您必须在 Linux 上定义环境变量 VSTEST_HOST_DEBUG=1。因此,调试特定单元测试的命令行可能像
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
运行后,它将打印进程 ID,您可以使用该 ID 从 Visual Studio 附加到 AcmeUnitTest Linux 容器特定进程。在“附加到进程”对话框中选择“连接类型”为“Docker(Linux 容器)”。
此外,为了能够在 Linux 上进行调试,您必须确保程序集(包括测试程序集)的 CSPROJ 文件使用新的可移植 PDB 格式。否则,你的DLL调试信息将不会被加载。请注意,新 CSPROJ 文件中“DebugType”的默认值是“portable”。因此,您可以删除带有“DebugType”的行或按如下所述进行编辑。
<DebugType>portable</DebugType>
我预计我们很快就会将此作为集成功能集成到 Visual Studio 中,而不必手动执行此操作。