Я предоставляю общий поставщик для сериализации Json:
public interface IJsonSerializerProvider
{
T? Deserialize(string value);
string Serialize(object? obj);
object? Deserialize(string value, string type);
}
public class JsonSerializerProvider : IJsonSerializerProvider
{ ... }
В своих тестах я предоставляю имитацию этой версии, которая проксирует реального провайдера в качестве функции по умолчанию, например:
object? paramObj = null;
JsonSerializerProviderMock
.Setup(x => x.Serialize(IsAny()))
.Callback(s =>
{
paramObj = s;
})
.Returns(x => new JsonSerializerProvider().Serialize(paramObj));
var param1 = "";
var param2 = "";
JsonSerializerProviderMock
.Setup(x => x.Deserialize(IsAny()))
.Callback(s =>
{
param1 = s;
})
.Returns(x => new JsonSerializerProvider().Deserialize(param1));
JsonSerializerProviderMock
.Setup(x => x.Deserialize(IsAny(), IsAny()))
.Callback((s, r) =>
{
param1 = s;
param2 = r;
})
.Returns(x => new JsonSerializerProvider().Deserialize(param1, param2));
К сожалению, при запуске последнего определения возникла такая ошибка:
System.ArgumentException
Invalid callback. Setup on method with 2 parameter(s) cannot invoke callback with different number of parameters (1).
at Moq.MethodCall.ValidateNumberOfCallbackParameters(Delegate callback, MethodInfo callbackMethod)
Подробнее здесь: https://stackoverflow.com/questions/797 ... d-with-moq