如何解决.net测试挂起“正在开始测试执行,请稍候..."; [英] Howto resolve .net test hangs on "Starting test execution, please wait..."

查看:44
本文介绍了如何解决.net测试挂起“正在开始测试执行,请稍候...";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从 Jenkins 构建服务器上的命令行执行 dotnet test,但它只是挂起:

I am trying to execute dotnet test from the command line on our Jenkins build server, but it just hangs on:

开始执行测试,请稍候...

在本地运行此命令时效果很好

It works fine when running this command locally

如果我切换到使用 dotnet xunit 它会失败并显示以下内容:

If I switch to using dotnet xunit it fails with the following:

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 Filesdotnet
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 FilesdotnetsharedMicrosoft.NETCore.App]
15:42:58       2.0.9 at [C:Program FilesdotnetsharedMicrosoft.NETCore.App]
15:42:58       2.1.2 at [C:Program FilesdotnetsharedMicrosoft.NETCore.App]
15:42:58       2.1.3 at [C:Program FilesdotnetsharedMicrosoft.NETCore.App]
15:42:58       2.1.4 at [C:Program FilesdotnetsharedMicrosoft.NETCore.App]

根据错误消息,我们已经在服务器上安装了 dotnet 核心 SDK,但我们似乎遗漏了一些东西.

As per the error message, we have installed the dotnet core SDK on the server but we seem to be missing something.

我的测试项目如下:

<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>

推荐答案

版本控制是一个红鲱鱼,结果证明它是一个简单得多的问题.我的测试正在测试异步控制器方法,而我的非异步测试正在执行:

The versioning was a red herring and it turned out to be much simpler problem. My tests were testing Async controller methods, and my non-async tests were doing:

var result = controller.PostAsync(request).Result;

一旦我将测试本身更改为使用 async/await 模式,它们就可以正常工作:

as soon as I changed the tests themselves to use the async/await pattern they worked fine:

var result = await controller.PostAsync(request);

帮助我诊断问题的是使用 dotnet test --verbosity d 参数.使用它时,它会输出一些正在通过的测试,而不仅仅是开始测试执行,请稍候".有趣的是,每次我运行该命令时,它都会在出现卡住之前执行不同数量的测试.这表明可能存在某种线程死锁问题导致我找到了解决方案.我仍然不确定为什么该命令在我的本地机器上运行良好,但在我们的 Jenkins 代理上运行良好.

Something that helped me diagnose the issue was using the dotnet test --verbosity d argument. When using this it was outputting some tests that were passing rather than just "Starting test execution, please wait". Interestingly every time I run the command it would execute a different number of tests before appearing to get stuck. This suggested there was perhaps some sort of thread deadlock issue which led me to the solution. I'm still unsure why the command ran fine on my local machine but not our Jenkins agent.

这篇关于如何解决.net测试挂起“正在开始测试执行,请稍候...";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆