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 solltenUnd 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?
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. –
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. –
Option (1) ist es! Danke für die Antworten. – bchilders