2017-10-31 2 views
0

Also ich bin ein bisschen neu in diesem Testgeschäft und mit der Moq-Bibliothek. Ich wundere mich über die Verwendung der It.Is() -Methode.Sollte ich It.Is <T>() als Testparameter verwenden?

sagen, dass ich eine Klasse habe ich unter Beweis stellen möchte:

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

Also habe ich eine entsprechende Klasse zu Test machen:

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); 
    } 
} 

schlägt jedoch fehl, mein Test! Wenn ich in den Debugger schaue, merke ich, dass myInt auf Null gesetzt ist!

So bedenkt, dass ich bin, dass entweder:

1) Ich bin dumm, und das ist nicht, wie man It.Is()

2) Es ist ein Fehler in Moq

verwenden sollten

Und wie würde ich in jedem Fall das obige Szenario testen? Wechseln Sie zu [InlineData()] und werfen Sie eine Handvoll von Nicht-Null-Ints ein, nehme ich an?

+1

Ich kenne Moq nicht, aber alle Beispiele in ihren Dokumenten für 'It.Is <> T()' gehen durch die 'Setup'-Klasse, die ein Mechanismus zum Initialisieren von Mock-Szenarien zu sein scheint. Du scheinst es nicht auf diese Weise zu benutzen, und ja, es scheint möglich, dass du es nicht richtig verwendest. –

+2

Es ist nicht klar, warum Sie Moq überhaupt hier verwenden. Was glauben Sie, dass Sie versuchen zu verspotten, und warum? Ja, es klingt so, als ob Sie einen parametrisierten Test verwenden sollten - aber auch, erfahren Sie, was Spott zu erreichen versucht, und Sie werden sehen, warum es hier unpassend ist. –

+0

Option (1) ist es! Danke für die Antworten. – bchilders

Antwort

1

Moq It.Is() ist in einem Mock<T> zu verwenden. Es wird verwendet, um Parameter anzupassen, wenn Sie einen Mock-Aufruf einrichten oder überprüfen. Ich würde Ihnen wärmstens empfehlen, Moq quickstart/documentation zu lesen. Eine schnelle Suche nach C# unit testing with mock würde auch nicht schaden.

Verwandte Themen