Sto provando a verificare un parametro che è una classe. Il codice in fase di test va bene. Il bug è nel test.Verifica Moq con parametro oggetto
Ho provato due metodi, entrambi hanno fallito.
Qui sono i miei tentativi:
1:
this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
{
Width = 256,
Height = 256,
}));
questo non riesce sempre, anche se un oggetto passato come secondo parametro ha uguali proprietà. Il primo parametro è verificato bene.
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");
}
);
Questo passa sempre, anche quando dovesse fallire. Gli Assert in the callback falliscono, ma l'eccezione non viene passata al contesto esterno e quindi il test passa sempre.
Potete aiutarmi a trovare quello che sto facendo male?
Spot, grazie! – rhughes
La sintassi che dovevo usare sarebbe: 'It.Is ((ImageFilterOptions p) => p.Width == 256 && p.Height == 256)'. Non c'era un generico 'Is' – Nemo1024
La versione generica funziona per me e si trova nei documenti API http://www.nudoq.org/#!/Packages/Moq/Moq/It/M/Is(TValue) - sei tu usando una versione obsoleta di Moq? –