Was ist es.isAny und was es ist.in mock Unit-Tests
Gibt es viele Fragen wurden schon gestellt, aber ich glaube, ich brauche etwas mehr basic, klarer konnte das Konzept, so wie ich bin Anfänger in TDD. Ich kann nicht vorwärts gehen, bis dann.
Könnte, gehen Sie bitte über folgenden testmethod und erklären, wenn ich etwas falsch verstanden:
[Test]
public void ShouldSearch()
{
var ColumnList = new List<Column>();
Die folgende Zeile bedeutet, dass ich Spott-Objekt.
Aber was It.IsAny<>()
bedeutet hier?
this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>()))
.Returns(ColumnList);
var result = this.getColouminfo.GetFinalRecords(this.context, this.gridColumn);
this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context),
It.Is<Column>(y => y.Id == 2)), Times.Once);
Assert.AreEqual(1, result.Data.Count, "Not equal");
Assert.IsTrue(result.Data.Success, "No success");
Du musst angemeldet sein, um einen Kommentar abzugeben.
It.IsAny<T>
ist zu prüfen, dass der parameter vom Typ T, es kann keine Instanz des Typs T. Es ist im Grunde sagen, ist mir egal, was Sie hier so lange wie es ist Art von T.this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>())).Returns(ColumnList);
Den oben genannten ist zu sagen, wenn die
GetColumn
Methode wird aufgerufen, mit Parametern (wie lange diese Art vonContext
undColumn
beziehungsweise), Rückkehr derColumnList
.It.Is<T>
können Sie prüfen, was übergeben wurde, und bestimmen, ob die parameter, die übergeben wurde, die Ihre Bedürfnisse erfüllt.this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context), It.Is<Column>(y => y.Id == 2)), Times.Once);
Oben ist zu behaupten, dass die
GetColumn
- Methode aufgerufen wurde genau einmal mit derContext
parameter gleichthis.Context
und einColumn
parameter, deren Id-Eigenschaft ist gleich 2.Edit: der Rückgriff auf diese Antwort Jahre später mit etwas mehr wissen.
this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context), It.Is<Column>(y => y.Id == 2)), Times.Once);
verkürzt werden kann, umthis.ColumnServiceMock.Verify(x => x.GetColumn(this.context, It.Is<Column>(y => y.Id == 2)), Times.Once);
. Sie brauchen nicht, Es zu benutzen.Überprüfen auf Referenz-Gleichheit, können Sie übergeben Sie einfach das Objekt, direkt.It.IsAny<T>()
gibt alles das ist von diesem Typ.It.Is<T>()
geht noch weiter und nimmt ein lamda stellen Sie sicher, es passt genau.Beide sind nur Möglichkeiten, um ein argument angeben, dass Sie nicht angeben wollen, Wann genau spöttisch. So zum Beispiel, wenn das argument ein string-Namen, und Sie kümmern sich nicht um die genaue Bezeichnung in Ihrem test, den Sie verwenden können:
It.IsAny<string>()
in Ihrem mock-Spezifikation, die passt auf jede Zeichenfolge.Wenn du immer die Namen beginnen mit "S" dann können Sie tun,
It.IsAny<string>(x => x.StartsWith("S"))
wird nur für den Abgleich von Zeichenfolgen beginnend mit S.