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