J'essaie de vérifier un paramètre qui est une classe. Le code testé est correct. Le bug est en cours de test.
J'ai essayé deux méthodes, qui ont toutes deux échoué.
Voici mes tentatives:
1:
this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
{
Width = 256,
Height = 256,
}));
Cela échoue toujours, même si un objet transmis comme second paramètre a des propriétés égales. Le premier paramètre est vérifié correctement.
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");
}
);
Cela passe toujours, même en cas d'échec. Les assertions du rappel échouent, mais l'exception n'est pas transmise au contexte externe et le test réussit donc toujours.
Pouvez-vous m'aider à trouver ce que je fais mal?
La première tentative est plus proche de ce que vous souhaitez réaliser.
La raison de l'échec est que Moq utilise (probablement) Object.Equals
Sous le couvercle pour tester si le paramètre ImageFilterOptions
avec lequel la méthode a été appelée est la même instance que celle que vous avez fournie dans l'appel à Verify
.
Il est impossible qu'elles soient la même instance, car dans Verify
vous créez une new ImageFilterOptions()
.
Au lieu d'effectuer la vérification des paramètres de cette façon, vous pouvez utiliser la syntaxe It.Is
De Moq pour fournir une expression qui vérifie que le paramètre est bien celui attendu.
Dans votre cas, vous souhaitez vérifier que le paramètre est de type ImageFilterOptions
et que Width
et Height
sont définis sur 256
. L'expression qui vous permet de le faire est:
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)
Ainsi, votre appel à Verify
pourrait ressembler à ceci:
this.MockImageResizeFilter.Verify(m => m.Filter(
this.UploadedFileData,
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)));