Why or how to use NUnit methods with ICollection<T>
Some of NUnit
's Assert methods are overloaded to use ICollection
but not ICollection<T>
and thus you can't use them.
Is there anyway around this? Heck, am I doing something stupid?
I'm having to drop back to using Assert.AreEqual
rather than specialised methods and its making my tests ugly.
Any advice?
Edit:
Thanks for the responses. The That
method of NUnit seems interesting so I'll look into it at a later date.
Mark correctly mentioned this, but NUnit Collection Asserts are excellent. I've recently used them on some new tests and fou开发者_运维问答nd them excellent to work with.
I don't know if this is what you're looking for, but for generic collections instead of using:
Assert.Contains(member, list);
I use:
Assert.That(list.Contains(member));
which I find almost as readable.
ICollection
and ICollection<T>
are different contracts - one does not inherit the other.
http://msdn.microsoft.com/en-us/library/system.collections.icollection_members.aspx http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx
If you have a generic collection you can call ToList()
on it and get a List<T>
, which happens to implement the non-generic ICollection
as well. Then use that List in the NUnit Assert method.
There are a set of CollectionAsserts, or you could inherit your test from AssertHelper and use syntax like
Expect(actual, Is.EquivalentTo(expected));
A look at the documentation should give you the syntax for the constraints that apply to collections.
Here's a link (this is version 2.5.2)
N.B. Expect is just shorthand for Assert.That...
精彩评论