У меня есть несколько приемочных тестов NUnit (т. Е. Не unit тесты), которые должны подключаться к нескольким экземплярам Redis во время выполнения.
StackExchange.Redis bestпрактики рекомендуют хранить и повторно использовать экземпляры ConnectionMultiplexer (см. здесь: https://stackexchange.github.io/StackExchange.Redis/Basics),, поэтому я придумал этот синглтон, который позволяет повторно использовать объект ConnectionMultiplexer:
internal static class RedisConnectionCache
{
// concurrency locks omitted for simplicity
private static readonly Dictionary<string, IConnectionMultiplexer> ConnectionCache = new Dictionary<string, IConnectionMultiplexer>();
public static IConnectionMultiplexer GetMultiplexer(string connectionString)
{
if (ConnectionCache.TryGetValue(connectionString, out var multiplexer))
{
return multiplexer;
}
var multiplexer= ConnectionMultiplexer.Connect(ConfigurationOptions.Parse(connectionString));
ConnectionCache.Add(connectionString, multiplexer);
return multiplexer;
}
}
, который затем вызывается какэто во многих тестах:
var redisConnection = RedisConnectionCache.GetMultiplexer(connectionString);
var redisDb = redisConnection.GetDatabase(db);
redisDb.KeyDelete(key);
К сожалению, поскольку все это происходит во многих различных тестовых приборах NUnit, у меня нет хорошего способа распоряжаться своим словарем соединений Redis.
При условии, что мне нужно повторно использовать объекты соединения между различными контрольными приборами в одном и том же тестовом прогоне, какие у меня варианты? Пока что лучшее, что я могу придумать, - это OneTimeTearDown
тест, который очистит соединения после того, как все тесты будут выполнены.