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

XUnit测试中如何为PostMessage方法传入CancellationToken参数?

在XUnit测试中为方法提供CancellationToken的几种方案

针对你遇到的编译错误,这里提供三种常用的解决方式:

1. 使用无操作的默认取消令牌

这是测试正常流程时最常用的方式,直接传入CancellationToken.None,它是一个永远不会触发取消的令牌:

[Fact]
public async Task WhenAValidMessagePosted_ThenReturnStatus20()
{
    // Arrange (Seed)         

    // Act
    var result = await _service.PostMessage(CancellationToken.None);

    // Assert
    // 你的断言逻辑
}

2. 利用XUnit自动注入的取消令牌

XUnit支持在测试方法参数中直接声明CancellationToken,框架会自动注入一个令牌,当测试超时或被手动终止时,该令牌会触发取消,适合测试方法的取消响应逻辑:

[Fact]
public async Task WhenAValidMessagePosted_ThenReturnStatus20(CancellationToken cancellationToken)
{
    // Arrange (Seed)         

    // Act
    var result = await _service.PostMessage(cancellationToken);

    // Assert
    // 你的断言逻辑
}

3. 手动创建可控制的取消令牌

如果需要测试方法在主动取消时的行为,可以通过CancellationTokenSource创建自定义令牌,灵活控制取消时机:

[Fact]
public async Task WhenMessagePostingIsCancelled_ThenThrowOperationCanceledException()
{
    // Arrange
    using var cancellationSource = new CancellationTokenSource();
    // 提前触发取消,模拟操作中途取消的场景
    cancellationSource.Cancel();

    // Act & Assert
    await Assert.ThrowsAsync<OperationCanceledException>(() => 
        _service.PostMessage(cancellationSource.Token));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:27:16