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?

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.


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);

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.