Moq-Mock-Methode ohne Angabe von Eingabeparametern


133

Ich habe Code in einem Test mit Moq:

public class Invoice
{
    ...

    public bool IsInFinancialYear(FinancialYearLookup financialYearLookup)
    {
        return InvoiceDate >= financialYearLookup.StartDate && InvoiceDate <= financialYearLookup.EndDate;
    }
    ...
}

In einem Unit-Test versuche ich, diese Methode zu verspotten und sie als wahr zurückzugeben

mockInvoice.Setup(x => x.IsInFinancialYear()).Returns(true);

Gibt es sowieso diese Zeile zu schreiben, damit ich die Eingabe nicht angeben muss IsInFinancialYear. dh. Damit im Code nicht angegeben wird, um welchen Eingabeparameter es sich handelt, wird true zurückgegeben, was auch immer an ihn übergeben wird?

Antworten:


227

Sie können verwenden It.IsAny<T>(), um einen beliebigen Wert abzugleichen:

mockInvoice.Setup(x => x.IsInFinancialYear(It.IsAny<FinancialYearLookup>())).Returns(true);

Siehe den Abschnitt Übereinstimmende Argumente des Schnellstarts.


5
Mir ist klar, dass diese Antwort alt ist, aber was ist, wenn ich mehr als einen einfachen Parameter habe? Kann man einfach sagen "Alles, wo die Typen für alle Parameter passen"?
Brandon

6
@Brandon Dann haben Sie einen It.IsAny <Typ> () für jeden Parameter, wobei Typ der Typ ist, der dieser Parameter ist. Wenn Sie möchten, können Sie wahrscheinlich eine Hilfsfunktion schreiben, die dies über Reflexion für Sie erledigt.
user441521


3
Stimmen Sie den anderen Kommentaren hier zu: Die Eingabe für eine nicht triviale Methode ist ein großer Schmerz.
John Hargrove

Hat jemand einen Helfer, der das macht? Oder Sie müssen für jede einzelne Methode einen Helfer schreiben /
Meysam

18

Versuchen Sie It.IsAny<FinancialYearLookup>(), ein Argument zu akzeptieren:

mockInvoice.Setup(x => x.IsInFinancialYear(It.IsAny<FinancialYearLookup>())).Returns(true);

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.