Autofixture: No se puede crear una falsificación

Creado en 4 jun. 2018  ·  4Comentarios  ·  Fuente: AutoFixture/AutoFixture

Estoy en proceso de actualizar un proyecto en el que estaba trabajando hace unos años. En el proceso, me he actualizado a lo último de FakeItEasy y AutoFixture.

Tengo 40 pruebas que fallan con un error similar a:

AutoFixture no pudo crear una instancia desde
FakeItEasy.Fake 1 [System.Collections.Generic.IList 1[AllOverIt.Evaluator.AoiFormulaTokenProcessorContext]] porque la creación falló inesperadamente con una excepción.

Donde la excepción interna informa:
Failed to create fake of type System.Collections.Generic.IList 1 [AllOverIt.Evaluator.AoiFormulaTokenProcessorContext] `

La línea que falla es el equivalente a esto:
Fixture.Create<Fake<IList<AoiFormulaTokenProcessorContext>>>();

Como prueba probé algo más simple:
Fixture.Create<Fake<IList<int>>>();

Esto no arrojó, así que fui a buscar el constructor de AoiFormulaTokenProcessorContext . Se parece a esto:

public AoiFormulaTokenProcessorContext(Func<char, bool, bool> predicate, Func<char, bool, bool> processor)

Después de leer un poco en https://github.com/AutoFixture/AutoFixture/issues/984 intenté agregar 'GenerateDelegates' a esto:
Fixture.Customize(new AutoFakeItEasyCustomization {GenerateDelegates = true});

Pero sigo teniendo el mismo problema.

Como este código estaba funcionando, solo puedo asumir que hay otro cambio importante en algún lugar con el que aún no me he encontrado. Esperando que alguien pueda lanzarme una sugerencia o dos.

TIA.

question

Comentario más útil

Entiendo. Con las décadas de experiencia que tengo, debería saberlo mejor: he estado en el mismo barco y pregunto lo mismo. Gracias por las respuestas.

Todos 4 comentarios

¡Gracias por compartir el escenario!

Como de costumbre, ¿puedo pedirle que proporcione un ejemplo mínimo, completo y verificable para poder copiarlo y pegarlo para investigar profundamente el motivo? El diablo suele estar en algunos detalles, por lo que incluso si describió bien el escenario, aún podría suceder que algunos detalles no mencionados sean importantes.

¡Muchas gracias por adelantado! :aliviado:

Lo siento, debería haber creado otro (posiblemente un par de) proyectos; esperaba que mi pregunta hubiera provocado algo obvio antes de irme e hice eso, ya que habría involucrado la conversión de mis métodos de envoltura en código AutoFixture / FakeItEasy sin procesar.

La buena noticia es que parece que lo he arreglado.

La clase AoiFormulaTokenProcessorContext causa el problema es internal (en otro proyecto). Cuando lo cambié a public el error desaparece.

Ya tenía [assembly: InternalsVisibleTo("...")] en el archivo AssemblyInfo.cs pero acabo de recordar que mis proyectos anteriores también incluían [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] .

No recuerdo lo que hace este último, pero los errores ya se han ido.

Buenas noticias, el problema está mitigado: relajado: esa es la razón por la que solicité la muestra; siempre es más fácil cuando se aíslan otros factores.

No recuerdo lo que hace este último, pero los errores ya se han ido.

Lo sé: smile: Está relacionado con las falsificaciones y los proxies de Castle , que se utilizan bajo el capó. Sí, si la clase es interna, entonces debería ayudar.

Entiendo. Con las décadas de experiencia que tengo, debería saberlo mejor: he estado en el mismo barco y pregunto lo mismo. Gracias por las respuestas.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

joelleortiz picture joelleortiz  ·  4Comentarios

ploeh picture ploeh  ·  3Comentarios

zvirja picture zvirja  ·  3Comentarios

Ridermansb picture Ridermansb  ·  4Comentarios

malylemire1 picture malylemire1  ·  7Comentarios