0

テスト中に、プロジェクトに固有の Assert ヘルパー関数がいくつかあります。たとえば、2 つの IEnumerables が同等かどうかを頻繁に確認する必要があります (順序に関してではなく、参照によってまったく同じ内容です)。したがって、これらの静的クラスを用意してください。例えば:

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);して失敗すると、スタック トレース全体がヘルパー関数内に表示されます。私はそれを見逃したいので、開発者が来て assert のソースを見た場合、彼は MyAssert が失敗したことだけを見ますが、私のヘルパー関数内のどこに問題があったかはわかりません (彼はAssert.IsTrue(val)).

で実行できることはわかっていますがAssert.IsTrue(MyCollHelper.AreEquivalent(enumer1, enumer2))、これは前のものほど読みやすくありません。

4

2 に答える 2

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");
        }
    }
}
}
于 2013-05-11T11:54:27.663 に答える
0

残念ながら、これは現在不可能です。

于 2013-07-18T10:51:50.830 に答える