У меня есть простая оболочка для redis для stackexchange:
public interface IRedisClient
{
Task<RedisResult> ScriptEvaluate(LuaScript script, object parameters);
}
У меня есть метод, который вызывает ScriptEvaluate
public class Foo
{
private readonly IRedisClient _client;
public Foo(IRedisClient client)
{
_client = client;
}
public void RunScript()
{
_client.ScriptEvaluate(LuaScript.Prepare(""), new object());
}
}
Теперь, когда я использую NSubstitute
для насмешки IRedisClient
который вводится в Foo
и затем вызывается RunScript
public void Test()
{
_foo = new Foo(Substitute.For<IRedisClient>());
_foo.RunScript();
}
Я получаю следующую ошибку:
System.TypeLoadException: Метод 'AsBoolean' в типе 'Castle .Proxies.RedisResultProxy 'из сборки' DynamicProxyGenAssembly2, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = a621a9e7e5c32e69 'не имеет реализации.
Насколько я вижу Nsubstitute
/ * Внутренние компоненты 1022 * не могут правильно работать с RedisResult
. Мне не удалось найти какие-либо обходные пути.
Можно ли что-то сделать с этим?
PS Я получаю ту же ошибку при попытке настроить макет для возврата значения (то же исключение):
_client
.ScriptEvaluate(null, null)
.ReturnsForAnyArgs(RedisResult.Create((RedisKey)"result"));