2013-03-20 15 views
9

voglio mettere a confronto un elenco di oggetti, ignorando l'ordine degli oggetti nella lista e solo confrontando alcune delle proprietà negli oggetti, attualmente sto utilizzando il seguente codice per eseguire questo confronto:Come confrontare liste usando affermazioni fluenti?

actual.Should().NotBeNull(); 
actual.Count.Should().Be(expected.Count); 
//compare ignoring order 
foreach (var exp in expected) 
    actual.Should().Contain(act => 
     act.IndividualId.Equals(exp.IndividualId) 
     && act.Email.Equals(exp.Email) 
     && act.FirstName.Equals(exp.FirstName) 
     && act.LastName.Equals(exp.LastName) 
    ); 

Tuttavia, ciò non sembra ideale, poiché quando si verifica un errore non si ottiene una stampa dei valori previsti. Esiste un meccanismo integrato per eseguire questo confronto usando affermazioni fluenti?

risposta

10

Non ora. Abbiamo la nuova sintassi equivalency assertion di FA 2.0, ma ciò verificherà anche se gli oggetti appaiono nell'ordine corretto. Per la FA 2.1 sto cercando di supportarlo, ma non sono ancora sicuro se ciò funzionerà. Fondamentalmente significa che deve confrontare l'intero grafico dell'oggetto dietro un elemento della raccolta con i grafici degli oggetti per ogni altro elemento della collezione. Sicuramente sarà piuttosto lento.

+0

È possibile dire confrontare due tipi di elenco utilizzando actual.Should(). Contain (previsto)? – BraveNewMath

+0

Sì, è possibile eseguire actual.Should(). BeEquivalentTo (previsto); –

+1

per la flessibilità di solito serializziamo ogni oggetto su json, quindi usa il confronto delle stringhe, l'output dell'errore sembra buono e non hai mai bisogno di aggiornare il test dell'unità se qualcuno aggiunge una nuova proprietà –