linux - 从Visual Studio在Linux docker容器中调试nunit测试

标签 linux docker nunit

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

我想从Windows上的Visual Studio调试容器中的测试,但还不能做到这一点。从我所读的内容来看,似乎没有一种方法可以通过运行dotnet测试来调试测试。运行nunit-console似乎有可能,但由于我们使用的是nunit 3.12.0,因此无法运行该命令,因为它会抛出UnsupportedFrameworkException

有什么办法可以做我想做的事吗?我也打算了解完成相同任务的方法,但是使用不同的单元测试框架,由于任何特定原因,我都不依赖于nunit。

我正在将mcr.microsoft.com/mssql/server:2019-latest用于我的ubuntu 16.04容器。

最佳答案

您可以使用.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
查看更多有关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
一旦运行,它将打印可用于从Visual Studio附加到AcmeUnitTest Linux容器特定进程的进程ID。在“附加到进程”对话框中,将“连接类型”选择为“Docker(Linux容器)”。
另外,为了能够在Linux上进行调试,您必须确保程序集(包括测试程序集)的CSPROJ文件正在使用新的可移植PDB格式。否则,将不会加载您的DLL调试信息。请注意,新CSPROJ文件中“DebugType”的默认值为“便携式”。因此,您可以使用“DebugType”删除行,也可以按如下所述进行编辑。
<DebugType>portable</DebugType>
我希望不久后我们将在Visual Studio中将其作为集成功能,而不必手动进行。

关于linux - 从Visual Studio在Linux docker容器中调试nunit测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58347293/

相关文章:

amazon-ec2 - docker: 'network' 不是 docker 命令

java - jUnit中的CollectionAssert?

linux - 使用 du 估计列表文件中文件的空间量

linux - Expect 脚本 - 发送字符串所需的引号与 expect 所需的引号冲突

linux - VIM:标尺列值中的连字符

linux - 如何在csv文件上使用for循环来复制文件

docker - 如何在make文件中替换 “%”中的字符串

php - 我可以使用 Redis 容器 [Docker] 作为集群吗?

visual-studio-2010 - Nunit-agent 调试解决方法

c# - 将 lambda 传递给参数化的 NUnit 测试