Capisco che SetupSet è il vecchio modo di impostare la proprietà in Moq. Adesso è obsoleto, ma il mio intellisense mostra entrambi che nessuno di questi ha segnato Obsolette. Qualcuno può indicarmi l'effettiva differenza tra loro?Differenza tra SetupSet e SetupProperty in Moq
risposta
Probabilmente ho trovato una delle differenze come segue.
Se si sta tentando di simulare una proprietà Readonly, è necessario utilizzare SetupGet poiché SetupProperty non funziona in questo caso. Mentre SetupProperty può essere utilizzato per proprietà non di sola lettura se si desidera impostare l'aspettativa.
Per esempio, qui di seguito non funziona
public interface IXyz
{
int Id { get; }
}
//Test Side Code
var _mock = new Mock<IXyz>();
_mock.SetupProperty(x => x.Id, 1054);
Se si tenta di eseguire il codice sopra, verrà dicendo System.ArgumentException: proprietà IXyz.Id è di sola lettura
Quindi, se si modifica il codice di seguito, funzionerà
_mock.SetupGet(x => x.Id).Returns(1054);
SetupSet non è contrassegnato come obsoleto. Si potrebbe pensare a ExpectSet, contrassegnato come obsoleto con il messaggio, "ExpectSet è stato rinominato in SetupSet."
SetupSet
consente di indicare l'aspettativa che la proprietà verrà impostata:
mock.SetupSet(x => x.Prop = "bar").Verifiable();
mock.Object.Prop = "foo";
mock.Verify(); // fails
SetupProperty
sembra un modo per stub una proprietà sulla finto (vedere la stessa sezione della documentazione, come per SetupSet
).
Sì, ho pensato che SetupProperty agisce sia per getter e setter, ma che cosa viene utilizzato per SetupSet? – DotNetInfo
@Nimesh, ho aggiunto un esempio di utilizzo di 'SetupSet' per verificare che il setter di proprietà sia stato chiamato. –
@adrift, attualmente nessuno dei collegamenti funziona. Grazie per la spiegazione però. –
Suggerisci di modificare questo alla fine della tua risposta - è quello che fanno tutti gli altri –
Non penso che sia corretto al 100%. Secondo la documentazione, SetupProperty viene utilizzato per lo stub, non per impostare le aspettative. –