Nei test dell'unità C#, ho spesso richiesto un elenco di righe in base a un elenco di ID. Poi voglio assicurarmi che 1) per tutti gli ID, ci sia almeno una riga trovata con quell'ID e 2) per tutte le righe restituite, ogni riga ha un ID che è nella lista degli ID da trovare. Ecco come ho di solito assicurano che:Confronto elenco a due vie nel test unità C#
Credo che l'uso di Any
e All
è conveniente per tali controlli, ma volevo vedere se qualcuno pensa che questo è meno leggibile di quello che potrebbe essere, o se c'è forse un modo più bello di fare controlli bidirezionali come questo. Sto utilizzando MSTest in Visual Studio 2008 Team System per il test delle unità. Questo forse dovrebbe essere wiki della comunità se è troppo soggettivo.
Edit: Ora sto utilizzando una soluzione basata su suggerimento di Aviad P., e anche il fatto che il seguente test viene superato:
string[] ids1 = { "a", "b", "c" };
string[] ids2 = { "b", "c", "d", "e" };
string[] ids3 = { "c", "a", "b" };
Assert.AreEqual(
1,
ids1.Except(ids2).Count()
);
Assert.AreEqual(
2,
ids2.Except(ids1).Count()
);
Assert.AreEqual(
0,
ids1.Except(ids3).Count()
);
Questo sembra buono, e mi piace come scrivere 'x [primaryKey]' solo una volta. Comunque, penso che dovrebbe essere 'Count() == 0', considerando come' Except' è descritto. –
In realtà, è necessario mantenere> 0, ma scambiare i messaggi in giro. Modificata la mia risposta. –
Perché avresti bisogno di '> 0'? Prevedo che non ci sia alcuna differenza tra l'elenco degli ID dei risultati recuperati e l'elenco degli ID che ho interrogato. Intellisense descrive "Eccetto" come produrre la "differenza di set di due sequenze". –