我正在尝试dotnet test从我们的Jenkins构建服务器上的命令行执行,但是它挂了:
dotnet test
Starting test execution, please wait...
在本地运行此命令时工作正常
如果我切换到使用dotnet xunit它,则失败,并显示以下内容:
dotnet xunit
15:42:57 Locating binaries for framework netcoreapp2.1... 15:42:58 Running .NET Core 2.1 tests for framework netcoreapp2.1... 15:42:58 The specified framework version '2.1' could not be parsed 15:42:58 The specified framework 'Microsoft.NETCore.App', version '2.1' was not found. 15:42:58 - Check application dependencies and target a framework version installed at: 15:42:58 C:\Program Files\dotnet\ 15:42:58 - Installing .NET Core prerequisites might help resolve this problem: 15:42:58 http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409 15:42:58 - The .NET Core framework and SDK can be installed from: 15:42:58 https://aka.ms/dotnet-download 15:42:58 - The following versions are installed: 15:42:58 2.0.6 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 15:42:58 2.0.9 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 15:42:58 2.1.2 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 15:42:58 2.1.3 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 15:42:58 2.1.4 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
根据错误消息,我们已经在服务器上安装了dotnet core SDK,但似乎缺少了一些东西。
我的测试项目如下所示:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <IsPackable>false</IsPackable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.1.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" /> <PackageReference Include="Moq" Version="4.10.0" /> <PackageReference Include="RichardSzalay.MockHttp" Version="5.0.0" /> <PackageReference Include="xunit" Version="2.3.1" /> <PackageReference Include="xunit.runner.console" Version="2.4.0" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" /> <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" /> </ItemGroup> </Project>
版本控制是一个红色鲱鱼,事实证明这是一个更简单的问题。我的测试正在测试异步控制器方法,而我的非异步测试正在执行:
var result = controller.PostAsync(request).Result;
一旦我将测试本身更改为使用异步/等待模式,它们就可以正常工作:
var result = await controller.PostAsync(request);
使用该dotnet test --verbosity d参数可以帮助我诊断问题。使用此功能时,它输出的是通过的某些测试,而不仅仅是“正在开始执行测试,请稍候”。有趣的是,每次我运行该命令时,它都会执行不同数量的测试,然后再被卡住。这表明可能存在某种线程死锁问题,导致我找到了解决方案。我仍然不确定为什么该命令在我的本地计算机上可以正常运行,而在我们的Jenkins从机上却不能运行。
dotnet test --verbosity d