c# - tipo - ¿Cómo obtener acceso al valor de los parámetros en Devoluciones() usando FakeItEasy?
parametros programacion c# (2)
Tengo una interfaz con una fábrica utilizada para crear algunos objetos de datos.
interface IFactory
{
IData Create (string name, string data);
}
interface IData
{
// ....
}
class Data : IData
{
public Data (string name, string data)
{
// .....
}
}
Necesito crear una fábrica de simulacros para pasar a otro módulo y este módulo utilizará este simulacro para crear datos.
Para un ejemplo rápido, un módulo simple se parece a:
class QuickModule
{
private readonly IFactory _factory;
public QuickModule (IFactory factory)
{
_factory = factory;
}
public IEnumerable<IData> GetData ()
{
yield return _factory.Create ("name1", "abc");
yield return _factory.Create ("name2", "def");
}
}
Así, la fábrica se llama dos veces con dos conjuntos de parámetros.
Usando Moq, esto es fácil:
var factoryMock = new Mock<IFactory> ();
factoryMock.Setup (x => x.Create (It.IsAny<string> (), It.IsAny<string> ()))
.Returns ((string name, string data) => new Data (name, data));
var module = new QuickModule (factoryMock.Object);
var list = module.GetData ();
Sin embargo, usando FakeItEasy esto no parece ser posible:
var factory = A.Fake<IFactory> ();
A.CallTo (() => factory.Create (A<string>.Ignored, A<string>.Ignored))
.Returns (new Data (???, ???));
var module = new QuickModule (factory);
var list = module.GetData ();
¿Cómo puedo acceder a los valores de los parámetros?
Aquí se explica cómo devolver el objeto que pasaste al método.
ManufacturedPart inputPart;
A.CallTo(() => partRepo.InsertPart(A<ManufacturedPart>._))
.ReturnsLazily(x => inputPart = x.Arguments.Get<ManufacturedPart>("part"));
Ok, parece que ReturnsLazily () es la respuesta.
Así que aquí está lo que hice:
var factory = A.Fake<IFactory> ();
A.CallTo (() => factory.Create (A<string>.Ignored, A<string>.Ignored))
.ReturnsLazily ((string name, string data) => new Data (name, data));
var module = new QuickModule (factory);
var list = module.GetData ();
¿Es esta la forma recomendada o hay otra?