@Lambdageek;
Assert.That(aCollection, Has.Member(aValue)
Assert.That(aCollection, Has.No.Member(aValue)
已经有一段时间了。还有许多其他有用的集合约束,有据可查的here。
除了可读性之外,当出现故障时,您还可以获得更有用的反馈。值得付出微乎其微的额外努力,IMO。
编辑
[Test]
public void Test() {
var c = new[] {"one", "two"};
Assert.That(c, Has.Member("three"));
}
Test failed:
Expected: collection containing "three"
But was: < "one", "two" >
Tests.cs(73,0): at ...Test()
干杯,
浆果
穷人的约束
public static class TestExtensions
{
public static bool IsOneOf<T>(this T candidate, IEnumerable<T> expected) {
if (expected.Contains(candidate)) return true;
var msg = string.Format("Expected one of: '{0}'. Actual: {1}", ", "._insertBetween(expected.Select(x => Convert.ToString(x))), candidate);
Assert.Fail(msg);
return false;
}
private static string _insertBetween(this string delimiter, IEnumerable<string> items)
{
var builder = new StringBuilder();
foreach (var item in items)
{
if (builder.Length != 0)
{
builder.Append(delimiter);
}
builder.Append(item);
}
return builder.ToString();
}
internal static IEnumerable<string> GenerateSplits(this string str, params char[] separators)
{
foreach (var split in str.Split(separators))
yield return split;
}
}
测试失败
[Test]
public void IsOneOf_IfCandidateNotInRange_Error()
{
IEnumerable<string> expected = new[] { "red", "green", "blue" };
const string candidate = "yellow";
Assert.That(candidate.IsOneOf(expected));
}
IsOneOf_IfCandidateNotInRange_Error' failed:
Expected one of: 'red, green, blue'. Actual: yellow