2017-10-09 17 views
27

私は私のテストスイートには、このような何かを行くテストを持っている: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#関数の呼び出しの仕組みのために、変数の抽出に関係なく同じ入力が得られるでしょう)。

私は出力からその警告を削除するだけではない。私の質問への答えはまたなぜの警告がライブラリに最初に含まれ、なぜ私は代わりに使用すべきであるかを説明します。

+0

'stuffCollection.Count()'を別の変数に格納してそれをassertに渡すと、同じエラーが発生しますか? – hellyale

+0

多分[this one](https://stackoverflow.com/a/30815958/107625)? –

答えて

29

Xunitはほとんどの警告に対してすばやい修正を提供しているので、「正しい」と思われるものを確認できるはずです。あなたのケースでは

xunit

あなたは正確に一つのアイテムを期待されているので、それはあなたがAssert.Singleを使用することを望んでいます。 412などの任意の数値を表明していた場合、Countの使用に関する警告は表示されません。 1つのアイテムを期待している場合はSingle、アイテムが必要ない場合はEmptyを使用することを推奨します。

+3

ありがとうございます。 FWIW、私はVSコードでビルドするときにこれを見ていました。そこで、クイックアクションは表示されませんでした。実際には、警告メッセージに修正候補を含めるともっと便利でした。 –

+1

@TomasLycken - ああ。はい、ここに問題があります:https://github.com/xunit/xunit/issues/1423 – vcsjones

関連する問題