2012-01-24 17 views
5

FluentAssertions sembra non riuscire ad eccezione NullReferece quando provo a confronto due collezioni con i nullFluentAssertions Should.Equal su collezioni, contenenti nulli

[Test] 
    public void DeepWithNulls() 
    { 
     var l1 = new List<string> { "aaa", null }; 
     var l2 = new List<string> { "aaa", null }; 

     l1.Should().Equal(l2); 
    } 

Confronto funziona come previsto su collezioni senza nulli.

risposta

4

Questo sta accadendo a causa del fatto che in fondo nella logica di confronto collezione Asserzione perfetto utilizza seguente codice

for (int index = 0; index < expectedItems.Length; index++) 
      { 
       verification.ForCondition((index < actualItems.Length) && actualItems[index].Equals(expectedItems[index])) 
        .FailWith("Expected " + Verification.SubjectNameOr("collection") + 
         " to be equal to {0}{reason}, but {1} differs at index {2}.", expected, Subject, index); 
      } 

nel codice sopra expectedItems e actualItems sono le vostre liste

Ora pensare cosa accadrà durante seconda iterazione quando (parte sotto) verrà eseguita?

actualItems[index].Equals(expectedItems[index])

come actualItems[1] è null quindi tiri eccezione riferimento null

+0

Boom - 10K. Prego :) –

+1

C'è qualche soluzione alternativa con Fluent Assertions? O devo usare cicli nei test di unità se sono sicuro che i valori nulli sono normali per le raccolte testate? – tensorsigma

+0

per ora suggerirei di verificare che non ci sia alcun null nella raccolta prima di chiamare uguale e presentare un errore nel sito 'codeplex' di 'fluentassertion'. Un'altra opzione potrebbe essere quella di scaricare la fonte e risolverla da soli :) –