Metode tiruan Moq tanpa menentukan parameter input

133

Saya memiliki beberapa kode dalam pengujian menggunakan Moq:

public class Invoice
{
    ...

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

Jadi dalam unit test saya mencoba untuk mengejek metode ini dan membuatnya kembali benar

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

Apakah ada juga untuk menulis baris ini jadi saya tidak perlu menentukan input IsInFinancialYear. yaitu. Jadi itu tidak dalam kode apa parameter input itu akan mengembalikan true apa pun yang diteruskan ke sana?

AnonyMouse
sumber

Jawaban:

227

Anda dapat menggunakan It.IsAny<T>()untuk mencocokkan nilai apa pun:

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

Lihat bagian Argumen Pencocokan pada awal cepat.

Jeff Ogata
sumber
5
Saya menyadari jawaban ini sudah tua tetapi bagaimana jika saya memiliki lebih dari satu parameter sederhana? Apakah mungkin untuk mengatakan "Di mana saja jenis cocok untuk semua parameter"?
Brandon
6
@Brandon Kemudian Anda memiliki It.IsAny <type> () untuk setiap parameter di mana tipe adalah tipe apa pun yang param. Jika mau, Anda mungkin bisa menulis fungsi pembantu yang melakukan ini untuk Anda melalui refleksi.
user441521
3
Setuju dengan komentar lain di sini: mengetik ini untuk metode non-sepele adalah rasa sakit yang besar.
John Hargrove
Adakah yang punya pembantu yang melakukan ini? Atau Anda harus menulis untuk setiap metode penolong /
Meysam
18

Coba gunakan It.IsAny<FinancialYearLookup>()untuk menerima argumen apa pun:

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