【发布时间】:2021-07-15 10:25:04
【问题描述】:
我正在尝试为以下代码编写单元测试,但无法
运行时显示以下错误信息。
消息: 测试方法 DemoService.UnitTest.Common.RedisCacheTests.RemoveAllAsyncTest.WhenTheMethodIsInvoked_ShouldRemoveAllKey 抛出异常: Moq.MockException:IAsyncEnumerable.GetAsyncEnumerator(CancellationToken) 调用失败,模拟行为严格。 模拟上的所有调用都必须有相应的设置。
C#代码
var keys = await _redisConnection.GetServer(endPoint)
.KeysAsync(pattern: cacheKey.ToString())
.ToListAsync();
对于上面的代码,我试图模拟如下
var mockServer = new Mock<IServer>(MockBehavior.Strict);
var mockRedisKey = new Mock<IAsyncEnumerable<RedisKey>>(MockBehavior.Strict);
mockServer.Setup(x => x.KeysAsync(It.IsAny<int>(), It.IsAny<RedisValue>(), It.IsAny<int>(), It.IsAny<long>(), It.IsAny<int>(), It.IsAny<CommandFlags>())).Returns(mockRedisKey.Object);
【问题讨论】:
-
你的
mockRedisKey也需要为GetAsyncEnumerator()设置,因为ToListAsync()会调用它。
标签: c# unit-testing moq mstest