You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps中.NET Core 2.2测试项目执行失败求助

解决Azure DevOps中.NET Core 2.2测试任务失败及找不到测试程序集的问题

我来帮你一步步拆解并解决这些问题,先从当前MSTest找不到测试程序集的问题入手,再回头排查之前xUnit测试的异常情况。

一、先搞定MSTest找不到测试程序集的问题

从你贴出的日志来看,VSTest任务完全没匹配到任何测试dll,问题主要出在测试程序集的匹配规则和任务配置上:

1. 修正测试程序集的匹配路径

你当前的testAssemblyVer2配置里的通配符有冗余,而且没精准指向构建后的dll位置:

  • **\$(BuildConfiguration)\*\*unittests.dll 这里多了一层不必要的**,应该改成**\$(BuildConfiguration)\*unittests.dll
  • 更关键的是,.NET Core项目构建后的测试dll默认在bin目录下,所以最好直接指定到bin目录下的对应框架文件夹,比如**\bin\$(BuildConfiguration)\netcoreapp2.2\*test*.dll,这样能精准定位到.NET Core 2.2的测试程序集

修正后的匹配规则建议改成这样:

testAssemblyVer2: |
 **\bin\$(BuildConfiguration)\netcoreapp2.2\*test*.dll
 !**\*TestAdapter.dll
 !**\obj\**
 !**\*Microsoft.VisualStudio.TestPlatform*

2. 删掉手动指定的vstestLocation

你手动指定了2017版Visual Studio的TestPlatform路径,但Azure DevOps的托管代理已经预装了适配.NET Core的测试平台工具,手动指定旧版本路径反而会导致工具不兼容,直接删掉vstestLocationMethod和vstestLocation这两行配置就好。

3. 确认构建任务已经生成了测试程序集

一定要确保在VSTest任务之前,已经通过.NET Core任务执行了dotnet build命令编译测试项目,而且$(BuildConfiguration)变量的值(比如Release)和构建时的配置完全一致,不然测试dll根本没生成,自然找不到。

二、回头排查xUnit测试的无限执行和断言错误问题

你之前提到xUnit测试任务陷入无限执行,超时后出现Assert.Equal() Failure(预期OK,实际0),大概率是测试代码本身的问题:

1. 检查异步测试是否正确处理了await

如果你的测试里有异步方法,但没使用async/await,或者存在未完成的Task,很容易导致测试卡住无限执行。比如这种错误写法:

[Fact]
public void TestApiResponse() {
    var client = new HttpClient();
    var responseTask = client.GetAsync("/api/test");
    // 直接用Result会阻塞,还可能导致死锁
    Assert.Equal("OK", responseTask.Result.StatusCode.ToString());
}

改成正确的异步写法:

[Fact]
public async Task TestApiResponse() {
    var client = new HttpClient();
    var response = await client.GetAsync("/api/test");
    Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}

2. 定位断言错误的根源

Assert.Equal("OK", 0)这种类型不匹配的错误,说明你在某个测试里把数值0和字符串"OK"做了比较,仔细检查对应测试方法的断言逻辑,确认预期值和实际值的类型一致,比如是不是把响应状态码的数值和字符串"OK"搞混了。

3. 推荐用dotnet test代替VSTest任务

对于.NET Core项目,其实更推荐直接用DotNetCoreCLI@2任务执行dotnet test命令,它比VSTest任务更适配.NET Core的测试框架,配置也更简单:

steps:
- task: DotNetCoreCLI@2
  displayName: 'Build Test Projects'
  inputs:
    command: 'build'
    projects: '**/*test*.csproj'
    arguments: '--configuration $(BuildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: 'Run xUnit Tests'
  inputs:
    command: 'test'
    projects: '**/*test*.csproj'
    arguments: '--configuration $(BuildConfiguration) --logger "console;verbosity=normal"'
    publishTestResults: true

这个配置会自动找到所有测试项目,先编译再执行测试,还能自动把测试结果发布到Azure DevOps里,不用手动指定dll路径。

三、最后给你几个总结建议

  1. 优先使用DotNetCoreCLI@2的test命令来执行.NET Core测试,比VSTest任务更省心
  2. 所有异步测试方法必须用async Task修饰,并且在异步操作前加await,避免测试卡住
  3. 测试程序集的匹配路径一定要指向bin目录下构建后的dll,不要瞎写通配符
  4. 确保构建任务和测试任务使用相同的$(BuildConfiguration)配置,比如都是Release或者Debug

内容的提问来源于stack exchange,提问作者Frazer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:28:31