Ho una classe che implementa ICollection<SomeConcreteClass>
. I vincoli delle collezioni NUnit non lo riconoscono come una collezione.Cosa rende una classe una collezione in base ai vincoli della raccolta NUnit?
ad es. Assert.That(sut, Has.No.Member(someObjectOfTypeSomeConcreteClass));
tiri System.ArgumentException : The actual value must be a collection
e Assert.That(sut, Is.Empty);
fallisce con vuoto sut
.
Quindi quando è una raccolta una raccolta (secondo NUnit)?
dello stack:
System.ArgumentException : The actual value must be a collection Parametername: actual
at NUnit.Framework.Constraints.CollectionConstraint.Matches(Object actual)
at NUnit.Framework.Constraints.NotConstraint.Matches(Object actual)
MyTestFile.cs(36,0): at MyAssembly.MyTestFixture.MyTestMethod()
problemi di cui sopra si è verificato con NUnit 2.4.3.0. L'ho appena provato con 2.6. Is.Empty
funziona ora, ma Has.No.Member
non riesce ancora. Non chiama nemmeno Equals()
o operator ==()
. Come confronta gli elementi della collezione? RhinoMocks Arg<MyCollection>.List.Count(Is.Equal(1))
ora non funziona.
Conclusione:
Con NUnit 2.4 della collezione vincoli richiedono attuazione ICollection non generico per la raccolta di essere riconosciuto come un insieme (che risponde alla domanda originale). L'uguaglianza IEnumerable funziona come previsto.
Con NUnit 2.6 (e possibilmente 3,0) l'uguaglianza di IEnumerable
s viene controllata dagli elementi corrispondenti anche se Equals
viene sovrascritto. Ecco perché il vincolo di appartenenza non funziona se gli elementi sono IEnumerable
s stessi. Questo è un problema noto (https://bugs.launchpad.net/nunit-3.0/+bug/646786).
Per i dettagli vedere la mia risposta.
potete inserire la piena pila di l'eccezione generata? –