Próbuję zweryfikować parametr, który jest klasą. Testowany kod jest w porządku. Błąd jest w teście.Moq weryfikuj za pomocą parametru obiektu
Próbowałem dwóch metod, z których oba nie powiodło się.
Oto moje próby:
1:
this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
{
Width = 256,
Height = 256,
}));
To zawsze kończy się niepowodzeniem, mimo że obiekt przekazany jako drugi parametr ma jednakowe właściwości. Pierwszy parametr został zweryfikowany poprawnie.
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");
}
);
To zawsze przechodzi, nawet wtedy, gdy powinna ona niepowodzeniem. Asserts w wywołaniu zwrotnym nie działają, ale wyjątek nie jest przekazywany do zewnętrznego kontekstu, a zatem test zawsze przechodzi.
Czy możesz pomóc mi znaleźć to, co robię źle?
na miejscu, dzięki! – rhughes
Składnia, której musiałem użyć, to: 'It.Is ((ImageFilterOptions p) => p.Width == 256 && p.Height == 256)'. Nie było generycznego 'Is' – Nemo1024
Ogólna wersja działa dla mnie i jest w dokumentach API http://www.nudoq.org/#!/Packages/Moq/Moq/It/M/Is(TValue) - czy jesteś używając przestarzałej wersji Moq? –