2010-11-09 12 views
9

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

14

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); 
+0

Suggerisci di modificare questo alla fine della tua risposta - è quello che fanno tutti gli altri –

+1

Non penso che sia corretto al 100%. Secondo la documentazione, SetupProperty viene utilizzato per lo stub, non per impostare le aspettative. –

12

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).

+0

Sì, ho pensato che SetupProperty agisce sia per getter e setter, ma che cosa viene utilizzato per SetupSet? – DotNetInfo

+0

@Nimesh, ho aggiunto un esempio di utilizzo di 'SetupSet' per verificare che il setter di proprietà sia stato chiamato. –

+1

@adrift, attualmente nessuno dei collegamenti funziona. Grazie per la spiegazione però. –