Moq mock metoda bez określania parametru wejściowego


138

Mam kod w teście przy użyciu Moq:

public class Invoice
{
    ...

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

Więc w teście jednostkowym próbuję kpić z tej metody i sprawić, by zwróciła prawdę

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

Czy jest tak, aby napisać tę linię, więc nie muszę określać danych wejściowych IsInFinancialYear. to znaczy. Aby nie było w kodzie, jaki jest parametr wejściowy, zwróci wartość true, cokolwiek zostanie do niego przekazane?

Odpowiedzi:


233

Możesz użyć, It.IsAny<T>()aby dopasować dowolną wartość:

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

Zobacz sekcję Dopasowywanie argumentów w przewodniku Szybki start.


6
Zdaję sobie sprawę, że ta odpowiedź jest stara, ale co, jeśli mam więcej niż jeden prosty parametr? Czy można po prostu powiedzieć „Cokolwiek, gdzie typy pasują do wszystkich parametrów”?
Brandon

6
@Brandon Następnie masz It.IsAny <type> () dla każdego parametru, gdzie typ jest dowolnym typem tego parametru. Jeśli chcesz, prawdopodobnie możesz napisać funkcję pomocniczą, która zrobi to za Ciebie poprzez odbicie.
user441521


5
Zgadzam się z innymi komentarzami tutaj: wpisanie tego dla dowolnej nietrywialnej metody jest dużym problemem.
John Hargrove,

Czy ktoś ma pomocnika, który to robi? Albo musisz napisać pomocnika dla każdej metody /
Meysam

18

Spróbuj użyć, It.IsAny<FinancialYearLookup>()aby zaakceptować dowolny argument:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.