Я не смотрел исходный код NUnit, чтобы увидеть, как ребята из NUnit закодировали AreNotEqual.
Однако я могу рассказать вам, как это делается для MbUnit с таким же поведением.
Сначала в AssertNotEqual (a, b) проверяется, равны ли ссылки, выполняя код следующим образом:
if (Object.ReferenceEquals(left, right))
return true;
В вашем случае это не удастся. Затем он проверяет, являются ли объекты типом IEnumerable. Если они есть, выполните итерацию по ним и сравните, если элементы одинаковы и в том же порядке.
Однако в T типе в IEnumerable сложнее, чем string или ValueType в MbUnit.
var a = (IEnumerable<StringBuilder>)(new[] { new StringBuilder("one"), new StringBuilder("two") });
var b = (IEnumerable<StringBuilder>)(new[] { new StringBuilder("one"), new StringBuilder("two") });
Assert.IsFalse(a.Equals(b)); // Success
Assert.AreNotEqual(a, b); // Success