Hemos escrito una prueba que se parece a la siguiente. Esta prueba requiere que hemos creado en Equal
-sobrecarga para la CodeTableItem
-class:Aplicación de [AutoFixture] Semántica Comparación de Likeness a secuencias/colecciones/matrices/IEnumerable
ICollection<CodeTableItem> expectedValutaList = new List<CodeTableItem>();
expectedValutaList.Add(new CodeTableItem("DKK", "DKK"));
expectedValutaList.Add(new CodeTableItem("EUR", "EUR"));
RepoDac target = new RepoDac();
var actual = target.GetValutaKd();
CollectionAssert.AreEqual(expectedValutaList.ToList(),actual.ToList());
La prueba funciona bien, pero tiene la desafortunada dependencia a la Equality
-función, es decir, si extiendo la -class CodeTableItem
con uno más campo, y se olvida de extender la función Equals
, la prueba de la unidad todavía se ejecuta en verde, aunque no probamos todos los campos. Queremos evitar esta contaminación Equality
(consulte Test Specific Equality), que se ha escrito solo para cumplir con la prueba.
Hemos intentado usar OfLikeness
, y han reescrito la prueba de esta manera:
ICollection<CodeTableItem> expectedValutaList = new List<CodeTableItem>();
expectedValutaList.Add(new CodeTableItem("DKK", "DKK"));
expectedValutaList.Add(new CodeTableItem("EUR", "EUR"));
var expectedValutaListWithLikeness =
expectedValutaList.AsSource().OfLikeness<List<CodeTableItem>>();
RepoDac target = new RepoDac();
ICollection<CodeTableItem> actual;
actual = target.GetValutaKd();
expectedValutaListWithLikeness.ShouldEqual(actual.ToList());
Pero la prueba falla porque el Capacity
no es igual. He escrito código que se ejecuta a través de la reflexión muchas veces, y generalmente terminaba implementando sobrecargas para ignorar campos. ¿Hay alguna manera de ignorar ciertos campos con OfLikeness
o ShouldEqual
? ¿O hay alguna otra forma de resolver este problema?
Muchas gracias, Mark, ¡eso fue todo! ¡Elegante! –