在测试期间,我有几个特定于项目的Assert辅助函数。例如,我必须经常检查两个IEnumerables是否相同(通过引用完全相同的内容,而不是关于顺序)。所以有一个静态类。 E.g:
internal static class MyAssert
{
public static void AreEquivalent<T>(IEnumerable<T> enumerable1, IEnumerable<T> enumerable2)
{
bool val = false;
if (enumerable2 == null)
{
val = !enumerable1.Any();
} else {
var list1 = enumerable1.ToList();
var list2 = enumerable2.ToList();
val = (list1.Count == list2.Count && list1.Intersect(list2).Count() == list2.Count());
}
Assert.IsTrue(val);
}
}
然后,如果我使用MyAssert.AreEquivalent(enumer1, enumer2);
,它失败了,那么整个堆栈跟踪将显示在辅助函数中。我想错过它,所以如果开发人员来了,并且看到断言的来源,他只看到MyAssert事情失败了,但是他没有看到我的帮助函数里面的问题在哪里(他对{{他不能做任何事情) 1}}。
我知道可以使用Assert.IsTrue(val))
来完成,但这并不像以前那样有效。
答案 0 :(得分:0)
我不确定我是否理解正确。如果您或开发人员将使用Assert.Fail()
查看方法的哪个部分导致错误。我没有测试它:
internal static class MyAssert
{
public static void AreEquivalent<T>(IEnumerable<T> enumerable1, IEnumerable<T> enumerable2)
{
bool val = false;
if (enumerable2 == null)
{
val = !enumerable1.Any();
if (val == false)
{
Assert.Fail("enumerable2 is empty, enumerable1 is not");
}
}
else if (enumerable1 == null)
{
val = !enumerable2.Any();
if (val == false)
{
Assert.Fail("enumerable1 is empty, enumerable2 is not");
}
}
else
{
var list1 = enumerable1.ToList();
var list2 = enumerable2.ToList();
if (list1.Count != list2.Count)
{
Assert.Fail("Count result is not the same");
}
if (list1.Intersect(list2).Count() != list2.Count())
{
Assert.Fail("count of Intersect enumerable1 is not the same as enumerable2 count");
}
}
}
}
答案 1 :(得分:0)
不幸的是现在这是不可能的。