繁体   English   中英

模拟 Redis 进行单元测试

[英]Mock Redis for unit test

所以这是我的连接字符串

 public class RedisConnectorHelper
    {
        static RedisConnectorHelper()
        {
            RedisConnectorHelper.lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
             {
                 string redisServer = WebConfigurationManager.AppSettings["RedisServer"];
                 return ConnectionMultiplexer.Connect(redisServer+ ",allowAdmin=true");
             }, System.Threading.LazyThreadSafetyMode.PublicationOnly);
        }

        private static Lazy<ConnectionMultiplexer> lazyConnection;

        public static ConnectionMultiplexer Connection
        {
            get
            {
                return lazyConnection.Value;
            }
        }
    }

我的单元测试测试了用于存储 redis 缓存值的 divisions 方法,但在这里我无法弄清楚如何模拟 redis 进行单元测试,因为这个测试方法直接尝试与 redis 建立连接管道以及当地环境。

     [Test]
        public void GetDivisons()
        {
            var mockDatabase = new Mock<StackExchange.Redis.IDatabase>();

            var mockMultiplexer = new Mock<StackExchange.Redis.IConnectionMultiplexer>();
            var result = _notebookService.GetDivisons();
            Assert.NotNull(result);
        }

Redis 可以被认为是一种缓存服务的实现。 你可以

  1. 创建一个新的缓存接口
  2. 创建使用 Redis 的接口的实现
  3. 使用业务逻辑将这个新的依赖注入到类中

这允许为具有业务逻辑的类编写单元测试。 为了测试缓存服务基于Redis的实现,需要编写组件测试,此时需要一个Redis的运行实例。

或者您可以启动一个模仿 Redis 服务器的 TCP 服务器,但由于多种原因,这是一个糟糕的解决方案。 例如,它需要了解有关 Redis 服务器的一些详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM