Pregunta

Quiero poder comparar la semejanza de los dos objetos siguientes usando AutoFixture.SemanticComparison:

public class Object1
{
  public int a;
}

public class Object2
{
  public int a;
  public int b;
}

Ahora, cuando lo hago de esta manera:

var o1 = new Object1 { a = 1 };
var o2 = new Object2 { a = 1, b = 2};
o1.AsSource().OfLikeness<Object2>().ShouldEqual(o2);

Recibo la siguiente excepción:"Los siguientes miembros no coincidieron:- b."

Descubrí que puedo omitir el miembro 'b' de esta manera:

var o1 = new Object1 { a = 1 };
var o2 = new Object2 { a = 1, b = 2};
o1.AsSource().OfLikeness<Object2>().Without(object2 => object2.b).ShouldEqual(o2);

Sin embargo, encuentro que esto es bastante engorroso, porque cada vez que agrego un nuevo miembro a la clase Object2, tengo que corregir mis pruebas unitarias (o al menos los ayudantes de pruebas unitarias).

¿Hay alguna manera de decir "Quiero comparar la semejanza solo para el subconjunto que existe en ambos objetos"?

¿Fue útil?

Solución

Parece que le gustaría comparar dos objetos según el intersección de sus propiedades.Actualmente, la clase Likeness no admite esto.El razonamiento es este:

En este momento, el tipo de destino (en el ejemplo anterior, sería Objeto2) es la plantilla decisiva sobre la cual se realiza la comparación.Esto proporciona bastante fuerte declaración para una afirmación: toda propiedad o campo público de esta clase debe ser igualado.

Sin embargo, una afirmación sobre la coincidencia de la intersección de propiedades sería una muy débil declaración, porque eso la intersección puede estar vacía.Esto podría resultar en Falsos negativos.

Incluso si está haciendo TDD y siguiendo el ciclo Rojo/Verde/Refactor y ha visto fallar una prueba unitaria con una intersección de semejanza tan hipotética, las refactorizaciones posteriores podrían convertir dicha afirmación en un Falso Negativo, a medida que elimina la última propiedad o campo. Los dos objetos tienen en común y nunca lo notarás.

Sin embargo, AutoFixture es de código abierto y todo, así que eres bienvenido a sugerir esta característica o enviar una solicitud de extracción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top