VS2012断言助手功能 - 测试跑步者不应该跟踪我的功能

时间:2013-05-11 11:07:59

标签: c# unit-testing testing visual-studio-2012 automated-tests

在测试期间,我有几个特定于项目的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))来完成,但这并不像以前那样有效。

2 个答案:

答案 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)

不幸的是现在这是不可能的。