unit test setup objetos mock ejemplo c# .net unit-testing moq

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?