我正在做一个项目,我想使用 StackExchange.Redis 库连接到 Redis 数据库。此外,我想在我们的单元测试中使用 Moq 作为模拟库,但我遇到了一个障碍,我需要一些帮助来解决。
我的具体问题是,我有一个命令/响应架构,并且我正在尝试测试一个缓存“包装器”,该缓存“包装器”在执行实际工作以返回响应之前检查缓存是否可以满足命令。一个重要的考虑因素是缓存故障不应该停止处理请求,因此我想模拟 StackExchange.Redis IDatabase接口的某些故障。但是,我似乎无法弄清楚如何从我的模拟对象中抛出 RedisException。例如,我想只使用下面的代码,但它不能编译,因为这个库抛出的异常没有公共构造函数。
Mock<IDatabase> _mockCache = new Mock<IDatabase>();
// Simulate a connection exception to validate how the cache layer handles it
// THIS DOESN'T COMPILE THOUGH
//
_mockCache.Setup(cache => cache.StringGetAsync("a", CommandFlags.None)).Throws<RedisException>();
有没有更好的方法来模拟 StackExchange.Redis 库中的故障?我觉得我在 Moq 或如何针对这个库进行测试时遗漏了一些明显的东西。