问题描述
我目前正在为我的解决方案的RedisProvider类编写单元测试。我的班级中有一个方法可以在Redis缓存中设置密钥:
public async Task<bool> StringSetAsync(string key,string value)
{
var cache = multiplexer.GetDatabase();
//Some other stuff
result = await cache.StringSetAsync(key,value);
return result;
}
在单元测试中,我具有以下设置:
var mockMultiplexer = new Mock<IConnectionMultiplexer>();
mockMultiplexer.Setup(_ => _.IsConnected).Returns(true);
mockMultiplexer.Setup(_ => _.Configuration).Returns(MockedData.CacheConnectionString);
var mockDatabase = new Mock<IDatabase>();
mockMultiplexer
.Setup(_ => _.GetDatabase(It.IsAny<int>(),It.IsAny<object>()))
.Returns(() => mockDatabase.Object);
RedisCacheProvider mockedCacheProvider = new RedisCacheProvider(new Mock<ILogger<RedisCacheProvider>>
().Object,mockMultiplexer.Object);
var result = await mockedCacheProvider.StringSetAsync(It.IsAny<string>(),It.IsAny<string>());
当我为单元测试运行以上代码时,收到的结果始终为false。有没有办法得到真实的结果?这是怎么了?
解决方法
我意识到服务应该使用类来嘲笑它,而不是在类本身上对此进行验证。
您在这里:
mockedCacheProvider.Setup(h => h.StringSetAsync(
It.IsAny<string>(),It.IsAny<string>())).ReturnsAsync(() => true);