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

ReSharper 2022.2.3内置测试运行器不支持Assert.That的异步NUnit测试问题

ReSharper 2022.2.3 NUnit异步测试中Assert.That断言失败显示异常的问题

问题现象

使用ReSharper 2022.2.3内置测试运行器执行NUnit异步测试时:

  • 当使用Assert.That断言失败时,仅提示“一个或多个子测试出错。异常无堆栈跟踪”,且失败的测试条目会消失,无法查看错误详情
  • 使用Assert.AreEqual则能正常显示失败的具体信息,包括预期值、实际值和堆栈跟踪

测试代码示例:

[TestFixture]
public class ApiKeyMiddlewareTests
{
    [Test]
    public async Task Invoke_ActiveKey_Authorized()
    {
        var httpContext = new DefaultHttpContext();
        httpContext.Request.Headers.Add("XXXXX", "xxxx");

        var configuration = Options.Create(new AccessConfiguration { ActiveApiKeys = new List<string> { "xxxx" } });

        var middleware = new ApiKeyMiddleware(GetEmptyRequest(), configuration);

        await middleware.Invoke(httpContext);
        Assert.That(httpContext.Response.StatusCode, Is.EqualTo(200));  // 修改为非200值会触发异常显示问题
    }
}

问题原因

这是ReSharper 2022.2.x版本中针对NUnit异步测试的已知Bug,并非需要添加额外属性。核心原因是测试运行器在处理NUnit的Assert.That异步断言失败时,未能正确捕获和传递异常信息,导致测试上下文丢失。

解决方案

  1. 升级ReSharper版本:直接升级到2022.3及以上版本,该问题已在后续迭代中被官方修复
  2. 临时替代方案:在版本升级前,可临时改用Assert.AreEqual等直接断言方法,或者使用NUnit的Assert.Multiple包裹Assert.That,强制保留测试失败上下文:
Assert.Multiple(() =>
{
    Assert.That(httpContext.Response.StatusCode, Is.EqualTo(200));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:00:58