模拟Redis进行单元测试



这是我的连接字符串

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缓存值,但在这里我不知道如何模拟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实例。

或者你可以启动一个TCP服务器来模仿Redis服务器,但这是一个糟糕的解决方案,有几个原因。例如,它需要了解Redis服务器的一些细节。

最新更新