在VisualStudio的Linux docker容器中调试nunit测试

在VisualStudio的Linux docker容器中调试nunit测试,linux,docker,nunit,Linux,Docker,Nunit,我正在尝试将我们的.NET Core 3.0应用程序更改为在Linux容器中运行。我已经到了可以在容器中恢复和构建的地步,但是测试失败了,这是意料之中的。应用程序中的某些内容仅适用于Windows计算机 我想在Windows上的Visual Studio中调试容器中的测试,但还不能这样做。据我所知,似乎没有一种方法可以通过运行dotnet测试来调试测试。运行nunit控制台似乎有可能,但我无法运行它,因为它会引发不受支持的框架异常,因为我们使用的是nunit 3.12.0 有什么办法可以做我想做

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

我想在Windows上的Visual Studio中调试容器中的测试,但还不能这样做。据我所知,似乎没有一种方法可以通过运行dotnet测试来调试测试。运行nunit控制台似乎有可能,但我无法运行它,因为它会引发
不受支持的框架异常
,因为我们使用的是nunit 3.12.0

有什么办法可以做我想做的事吗?我也很乐意听到关于完成相同任务的方法,但是对于不同的单元测试框架,我并不因为任何特殊的原因而与nunit联系在一起


我正在为我的容器ubuntu 16.04使用mcr.microsoft.com/mssql/server:2019最新版本。

您可以使用.NET Core SDK Linux容器运行测试(适用于.NET Core 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
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
请参阅有关按类名、方法名等筛选的命令的详细信息

要进行调试,必须在Linux VSTEST_HOST_debug=1上定义环境变量。因此,调试特定单元测试的命令行可以如下所示

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
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从VisualStudio附加到特定于AcmeUnitTest Linux容器的进程。在“附加到进程”对话框中选择“连接类型”作为“Docker(Linux容器)”

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

<DebugType>portable</DebugType>
便携式 我希望不久的将来,我们将在VisualStudio中集成此功能,而不必手动完成