私のテストスイートには、次のようなテストがあります。
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
このテストは期待どおりに機能しますが、実行するとxUnitが警告を出力します。
警告xUnit2013:Assert.Equal()を使用してコレクションサイズを確認しないでください。
ただし、警告には代替手段が提案されていないため、この警告が出力されることを確認するテストのために、Google検索でxUnitのソースコードに移動します。
Assert.Equal()
がコレクションの長さを検証する正しい方法でない場合、何ですか?
明確にするために、私はxUnitを「だまして」この警告を出さないようにすることができることに気付きました変数を抽出するか、代わりにAssert.True(stuff.Count() == 1)
を使用します。後者は単なるハックで、前者はxUnitがたとえばIEnumerable<T>
の複数の反復を回避しようとすると、これは間違った方法です(問題の場合はコンパイラーのヒントを個別に取得するため)、xUnit自体は入力を複数回評価する必要はありません(で実際、C#関数呼び出しの仕組みにより、変数の抽出に関係なく同じ入力が得られる可能性があります)。
したがって、出力からその警告を削除することに興味があるだけではありません。私の質問への回答では、最初にライブラリに警告が含まれていることをwhyで説明し、why代わりに使用するアプローチの方が優れています。
私はこれが私に同じエラーを与えることを発見しました:
Assert.Equal(2, vm.Errors.Count());
そして、キャストするとエラーが表示されなくなりました。
Assert.Equal(2, (int)vm.Errors.Count());