Metodo Moq mock senza specificare il parametro di input


133

Ho un po 'di codice in un test usando Moq:

public class Invoice
{
    ...

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

Quindi in un unit test sto cercando di deridere questo metodo e farlo tornare vero

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

C'è comunque modo di scrivere questa riga, quindi non devo specificare l'input IsInFinancialYear. vale a dire. In modo che non nel codice quale sia il parametro di input restituirà vero qualunque cosa gli venga passata?

Risposte:


227

È possibile utilizzare It.IsAny<T>()per abbinare qualsiasi valore:

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

Vedi la sezione Argomenti corrispondenti della guida rapida.


5
Mi rendo conto che questa risposta è vecchia, ma se avessi più di un semplice parametro? È possibile semplicemente dire "Qualsiasi cosa in cui i tipi si adattano a tutti i parametri"?
Brandon

6
@Brandon Quindi hai un It.IsAny <type> () per ogni parametro dove type è qualunque sia quel parametro. Se lo desideri, probabilmente potresti scrivere una funzione di supporto che lo fa per te tramite la riflessione.
user441521


3
Concordo con gli altri commenti qui: digitare questo per qualsiasi metodo non banale è un grande dolore.
John Hargrove,

Qualcuno ha qualche aiuto che lo fa? Oppure devi scrivere per ogni singolo metodo un aiutante /
Meysam

18

Prova a utilizzare It.IsAny<FinancialYearLookup>()per accettare qualsiasi argomento:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.