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
相关产品推荐
相关产品推荐

