Useful C# method for unit testing
I’m unit testing a UI that needs to show some lists in various sorted orders, and I wanted to ensure that my tests would cover that. I found this method to come in handy:
1: public static bool IsOrderedBy<T>(this IEnumerable<T> coll,
2: Func<T, IComparable> val)
3: {
4: if (coll == null || coll.Count() == 0)
5: return true;
6:
7: var curVal = val(coll.ElementAt(0));
8: for (int i = 0; i < coll.Count(); i++)
9: {
10: if (val(coll.ElementAt(i)).CompareTo(curVal) < 0)
11: return false;
12:
13: curVal = val(coll.ElementAt(i));
14: }
15:
16: return true;
17: }
Here’s how to determine if a simple array is in order:
var arr = new int[] { 1, 2, 3, 5 };
bool ordered = arr.IsOrderedBy(i => i);
Here’s how you’d call it on a more complex object:
var arr = Enumerable.Range(1, 10)
.Select(e => new
{
Name = "bob",
Salary = 10 * e
});
bool ordered = arr.IsOrderedBy(i => i.Salary);
Avi