【问题标题】:Redis StringSetAsync returns false in Unit Tests using MoqRedis StringSetAsync 在使用 Moq 的单元测试中返回 false
【发布时间】:2020-12-07 06:45:45
【问题描述】:

我目前正在为我的解决方案的 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>());

当我为我的单元测试运行上述代码时,我收到的结果总是错误的。有没有办法得到真实的结果?这里有什么问题?

【问题讨论】:

    标签: c# azure .net-core redis moq


    【解决方案1】:

    我意识到这应该由使用类的服务来模拟,而不是在类本身上验证它。

    给你:

                mockedCacheProvider.Setup(h => h.StringSetAsync(
                     It.IsAny<string>(),
                     It.IsAny<string>())).ReturnsAsync(() => true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2015-10-04
      相关资源
      最近更新 更多