MOQ vérifiez avec le paramètre d'objet
J'essaie de vérifier un paramètre qui est une classe. Le code testé est bien. Le bug est dans le 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 passé en tant que deuxième 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 quand il devrait échouer. Les assertions dans le rappel échouent, mais le l'exception n'est pas passée au contexte externe, et donc le test passe toujours.
Pouvez-vous m'aider à trouver ce que je fais mal?
1 réponses
La première tentative est plus proche de ce que vous voulez atteindre.
La raison pour laquelle il échoue est que Moq utilise (probablement) Object.Equals
sous la couverture 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 pour eux d'être la même instance, car dans Verify
vous créez un 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 un expression qui vérifie le paramètre était celui attendu.
Dans votre cas, vous voulez vérifier que le paramètre est de type ImageFilterOptions
et que les Width
et Height
sont tous deux définis sur 256
. L'expression qui vous permet de le faire est:
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)
Donc, votre appel à Verify
pourrait ressembler à ceci:
this.MockImageResizeFilter.Verify(m => m.Filter(
this.UploadedFileData,
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)));