CollectionAssert.AreEquivalent与自定义IEqualityComparer

Gra*_*ton 29 c# nunit unit-testing

我有两个列表,我想检查两个列表是否相同(顺序不重要),以及它是否相同取决于IEqualityComparer我实现的实例.

理想的情况是我可以使用CollectionAssert.AreEquivalentCustom IEqualityComparer.但似乎CollectionAssert.AreEquivalent不接受任何IEqualityComparer.

关于如何以简洁和可重复使用的方式做到这一点的任何想法?

Qua*_*ter 36

CollectionAssert.AreEquivalent 实施方式如下:

Assert.That(actual, new CollectionEquivalentConstraint(expected), message, args);
Run Code Online (Sandbox Code Playgroud)

你可以写你的断言方式提供自定义的IEqualityComparer具有Using:

Assert.That(actual,
    new CollectionEquivalentConstraint(expected).Using(customComparer));
Run Code Online (Sandbox Code Playgroud)

您还可以缩短new CollectionEquivalentConstraintIs.EquivalentTo:

Assert.That(actual, Is.EquivalentTo(expected).Using(customComparer));
Run Code Online (Sandbox Code Playgroud)