valores valor tipo referencia reciben que programacion por pasar pasaje parametros parametro funciones como argumentos c# fakeiteasy

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?