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?

AnonyMouse
quelle

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.

Jeff Ogata
quelle
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);
jeha
quelle