2012-03-14 6 views
16

Riferendosi a questa domanda:Moq VerifySet (Azione) che sostituisce l'espressione obsoleta errore di compilazione

Moq how to replace obsolete expression

Ho il seguente:

[Test] 
public void OnSearchRequest_ViewFiresEvent_EventIsHandled() 
{ 
    // Arrange 
    Mock<IViewUsers> view = new Mock<IViewUsers>(); 
    Users users = new Users(view.Object); 

    // Act 
    view.Raise(v => v.SearchForUsers += null, this, new SearchEventArgs()); 

    // Assert 
    view.VerifySet(v=> v.SearchResult = It.IsAny<List<IUser>>()); 

} 

inizialmente ho avuto:

 // Assert 
     view.VerifySet(v => v.SearchResult); 

Ma stava ricevendo l'avviso:

'Moq.MockExtensions.VerifySet (Moq.Mock, System.Linq.Expressions.Expression>)' è obsoleta: 'sostituito da VerifySet (Azione)'

Così ho trovato il problema fa riferimento sopra, e ha cambiato in modo che corrisponda, ma ora sto ancora ricevendo quell'avvertimento, e per di più, un errore di duro "v.SearchResult" all'interno della chiamata a VerifySet:

un albero di espressione può non contiene un operatore di assegnazione.

Non riesco a vedere che sto formattando questo in modo improprio - quindi perché non riconosce questo come un'azione come implica l'altra domanda?

+0

Quale versione di Moq stai usando? Perché ho creato una piccola versione con 4.0.10827.0 ed è verde e compila senza l'avviso obsoleto ... Dovresti fornire più contesto su come appaiono le classi del tuo test. – nemesv

+0

moq 4.0.10827.0 –

+0

Quale altro contesto desideri? –

risposta

0

Non so se è utile, ma ho avuto problemi in passato utilizzando It.IsAny<> con elenchi. Potresti provare qualcosa come It.Is<List<IUser>>(l => l != null)?

1

Ho trovato qualcosa relativamente vicino a quello che stai chiedendo. Moq how to replace obsolete expression Non so se questo aiuta perché ho sempre usato solo mock.Setup e mock.Verify.

Inoltre, come accennato prima, provare a utilizzare espressioni lambda all'interno del proprio It.IsAny per individuare le cose più piccole in questo modo. Se una verifica fallisce, sai esattamente dove ha fallito. Soprattutto se ti aspetti un valore in una determinata posizione, ad esempio.