3

Visual Studio 2012の単体テスト、より正確にはコードカバレッジに問題があります。ターゲットコードは次のとおりです。

var someDeals = allDeals
            .Where(i => i.Number != null && !i.Number.StartsWith(SomeString))
            .Select(i => new DealInfoDto
            {
                CurrentDebtAmount = i.CurrentDebtAmount,
                Date = i.Date,
                NextMonthlyPaymentDate = i.NextMonthlyPaymentDate,
                Number = i.Number,
                AccountNumber = i.AccountNumber,
            })
            .ToArray();

分析コードカバレッジを実行すると、2行目(i.Number != null && !i.Number.StartsWith(SomeString))のラムダ式が部分的にタッチされた領域であり、100%のカバレッジを取得できないことが示されます。しかし、この式は評価されていると確信しています(SELECT内の式はOKなので、WHERE内の式はtrueであり、これは&&ステートメントの両方の部分が変更されたことを意味します。また、データをチェックしましi.Number != null!i.Number.StartsWith(SomeString)

このブロックがカバーされていないのはなぜですか?

PS私Whereは2つの表現に分割し、すべてがOKになりました。しかし、それは醜く見え、1つだけの方が良いでしょうWhere

allDeals
    .Where(i => i.Number != null)
    .Where(i => !i.Number.StartsWith(CardAccountIdentifier))
4

1 に答える 1

5

この質問は、 MSTestが複合ブール式の部分的なコードカバレッジを表示するのと非常によく似ています。

私が起こっていると思うのは、がであるときに初期の失敗パスをテストしていないということi.Numberですnull

覚えている場合、&&は最初の式が真である場合にのみ2番目の式を評価します。あなたの場合、(あなたがどのように、またはあなたのテストが何であるかについて言及していないので)あなたはあなたのallDealsコレクションにエントリがi.Numberあるテストまたはシナリオを持っていないのではないかと思いますnull

于 2012-10-31T21:57:33.070 に答える