私は私のテストスイートには、このような何かを行くテストを持っている:xUnit2013警告xUnitでコレクションのサイズを確認する方法は何ですか?
:ドゥ、私はそれを実行したときに
[Fact] public void VerifySomeStuff() { var stuffCollection = GetSomeStuff(); Assert.Equal(1, stuffCollection.Count()); }
このテストでは、警告を表示しxUnitの私は期待どおりに動作しますが、 Assert.Equal()を使用してコレクションのサイズをチェックしないでください。
しかし、警告には何も示唆されておらず、この警告が表示されることを確認するテストのためにgoogle検索でxUnitのソースコードが表示されます。
Assert.Equal()
がコレクションの長さを確認する正しい方法でない場合は、何ですか?
明確にする:xUnitがxUnitにこの警告を「トリックする」ことができるとわかりました。代わりに変数を抽出するか、代わりにAssert.True(stuff.Count() == 1)
を使用してください。後者はちょうどハッキーであり、前者はxUnitが、 IEnumerable<T>
の複数回の反復を避けようとすると、これは間違った方法です(それが問題であれば、それについて別々にコンパイラのヒントを得るため)、xUnit自体は入力を複数回評価する必要はありません実際には、C#関数の呼び出しの仕組みのために、変数の抽出に関係なく同じ入力が得られるでしょう)。
私は出力からその警告を削除するだけではない。私の質問への答えはまたなぜの警告がライブラリに最初に含まれ、なぜ私は代わりに使用すべきであるかを説明します。
'stuffCollection.Count()'を別の変数に格納してそれをassertに渡すと、同じエラーが発生しますか? – hellyale
多分[this one](https://stackoverflow.com/a/30815958/107625)? –