2017-10-31 3 views
0

私はこのテスト事業に少し新しく、Moqライブラリを使用しています。私はIt.Is()メソッドの使用について不思議です。私はそれを使用すべきですか?<T>()のテストパラメータですか?

は、私がテストの下に置くしたいのですが、私はクラスを持っていると言う:

public class ZeroChecker 
{ 
    public bool IsNotZero(int myInt) 
    { 
     return myInt != 0; 
    } 
} 

は、だから私はテストに対応するクラスを作る:

public class ZeroCheckerTest 
{ 
    [Fact] 
    public void IsNotZero_ReturnsTrue_WhenInputIsNotZero() 
    { 
     //Arrange 
     var myInt = It.Is<int>(i => i != 0); 
     ZeroChecker target = new ZeroChecker(); 

     //Act 
     bool actual = target.IsNotZero(myInt); 

     //Assert 
     Assert.True(actual); 
    } 
} 

しかし、私のテストが失敗しました!デバッガを見ると、myIntがゼロに設定されていることがわかります!

だから私はどちらかのことを検討している:)

1私は馬鹿だし、これは1がIt.Isを(使うべきかではありません)

2)バグが部品番号

にあります

どちらの場合でも、上記のシナリオをテストするにはどうすればいいですか? [InlineData()]に切り替えて、非ゼロのintをほんの一握り投げてください。

+1

Moqについてはわかりませんが、 'It.Is <> T()'のドキュメントにあるすべての例は 'Setup'クラスを通っています。これは模擬シナリオを初期化するメカニズムのようです。あなたはそのように「それ」を使用しているようには見えないので、はい、あなたはそれを正しく使用していない可能性があります。 –

+2

ここでMoqをなぜ使用しているのかは不明です。あなたが嘲笑しようとしていることは何と信じていますか、なぜですか?はい、パラメータ化されたテストを使用する必要があるように聞こえますが、モッキングが達成しようとしていることについても学びます。なぜそれが不適切であるのかを知ることができます。 –

+0

オプション(1)です!回答ありがとう。 – bchilders

答えて

1

Moq It.Is()は、Mock<T>内で使用されます。 Mockコールを設定または検証するときにパラメータを照合するために使用されます。私は強くあなたを読むことをお勧めしますMoq quickstart/documentation

また、C# unit testing with mockのクイック検索でも問題はありません。

関連する問題