c# - test - Moq verificar con parámetro objeto
unit test c# ejemplo (1)
El primer intento está más cerca de lo que quieres lograr.
La razón por la que falla es que Moq (probablemente) usa Object.Equals
debajo de la cubierta para probar si el parámetro ImageFilterOptions
el que se ImageFilterOptions
el método es la misma instancia que la que proporcionó en la llamada a Verify
.
Es imposible que sean la misma instancia, porque en Verify
creas un new ImageFilterOptions()
.
En lugar de realizar la comprobación de parámetros de esta manera, podría usar la sintaxis It.Is
de Moq para proporcionar una expresión que verifique que el parámetro era el esperado.
En su caso, desea verificar que el parámetro sea de tipo ImageFilterOptions
y que tanto el Width
como el Height
estén configurados en 256
. La expresión que te permite hacer eso es:
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)
Por lo tanto, su llamada a Verify
podría verse así:
this.MockImageResizeFilter.Verify(m => m.Filter(
this.UploadedFileData,
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)));
Estoy tratando de verificar un parámetro que es una clase. El código que se está probando está bien. El error está en la prueba.
He intentado dos métodos, los cuales han fallado.
Aquí están mis intentos:
1:
this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
{
Width = 256,
Height = 256,
}));
Esto siempre falla, incluso aunque un objeto pasado como segundo parámetro tenga propiedades iguales. El primer parámetro se verifica bien.
2:
this.MockImageResizeFilter.Setup(m => m.Filter(It.IsAny<byte[]>(), It.IsAny<ImageFilterOptions>()))
.Callback<byte[], ImageFilterOptions>((data, options) =>
{
Assert.AreEqual(this.UploadedFileData, data, "data");
Assert.AreEqual(filterOptions.Width, options.Width, "Width");
Assert.AreEqual(filterOptions.Height, options.Height, "Height");
}
);
Esto siempre pasa, incluso cuando debería fallar. Las afirmaciones en la devolución de llamada fallan, pero la excepción no se pasa al contexto externo y, por lo tanto, la prueba siempre pasa.
¿Puedes ayudarme a encontrar lo que estoy haciendo mal?