Sembra che CollectionAssert
non possa essere utilizzato con generici. Questo è super frustrante; il codice che voglio testare usa i generici. Che cosa devo fare? Scrivi un boilerplate per convertire tra i due? Controllare manualmente l'equivalenza di raccolta?CollectionAssertire utilizzare con generici?
Questo fallisce:
ICollection<IDictionary<string, string>> expected = // ...
IEnumerable<IDictionary<string, string>> actual = // ...
// error 1 and 2 here
CollectionAssert.AreEqual(expected.GetEnumerator().ToList(), actual.ToList());
// error 3 here
Assert.IsTrue(expected.GetEnumerator().SequenceEquals(actual));
errori di compilazione:
di errore 1:
'System.Collections.Generic.IEnumerator>' non contiene una definizione per 'ToList' e nessun metodo di estensione "ToList" che accetta un primo argomento di tipo "System.Collections.Generic.IEnumerator>" potrebbe essere trovato
Errore 2
'System.Collections.Generic.IEnumerator>' non contiene una definizione per 'ToList' e nessun metodo di estensione 'ToList' accettare un primo argomento di tipo 'System.Collections.Generic. IEnumerator>' potrebbe essere trovato
Errore 3
'System.Collections.Generic.IEnumerator>' non contiene una definizione per 'SequenceEquals' e nessun metodo di estensione 'SequenceEquals' accettare un primo argomento di digitare "System.Collections.Generic.IEnumerator>" potrebbe essere trovato
Cosa sto facendo di sbagliato? Non sto usando le estensioni correttamente?
Aggiornamento: Ok, questo sembra un po 'meglio, ma ancora non funziona:
IEnumerable<IDictionary<string, string>> expected = // ...
IEnumerable<IDictionary<string, string>> actual = // ...
CollectionAssert.AreEquivalent(expected.ToList(), actual.ToList()); // fails
CollectionAssert.IsSubsetOf(expected.ToList(), actual.ToList()); // fails
io non voglio essere il confronto liste; Mi interessa solo impostare l'uguaglianza dei membri. L'ordine dei membri non è importante. Come posso aggirare questo?
Sei sicuro? Mi ha dato errori nel compilatore, che posterò domani mattina. –
Ho sbagliato; CollectionAssert NON funziona su ICollection. Funziona solo con ICollection. Questo è stato richiesto su Connect, ma finora non è stato implementato. Possibile soluzione: http://stackoverflow.com/questions/662458/unittesting-ilist-with-collectionassert –
Se ricordo correttamente, le interfacce ICollection e ICollection sono VASTAMENTE diverse. Questo non è il caso di IEnumerable versus IEnumerable . Si prega di verificare i loro metodi. ICollection è utilizzato per qualcosa di diverso da ICollection . ICollection non ha nemmeno il metodo ADD: è usato per scopi "più di basso livello" come il multithreading e il marshalling. Pertanto, penso che dovresti trovare un'interfaccia che soddisfi meglio le tue esigenze, semplice IEnumerable forse? –
quetzalcoatl