Phương pháp mô phỏng Moq với chỉ định tham số đầu vào


133

Tôi có một số mã trong một thử nghiệm bằng Moq:

public class Invoice
{
    ...

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

Vì vậy, trong một bài kiểm tra đơn vị, tôi đang cố gắng chế giễu phương pháp này và làm cho nó trở lại đúng

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

Có cách nào để viết dòng này không vì vậy tôi không phải chỉ định đầu vào IsInFinancialYear. I E. Vì vậy, nó không có trong mã, tham số đầu vào là gì, nó sẽ trả về true bất cứ thứ gì được truyền cho nó?

Câu trả lời:


227

Bạn có thể sử dụng It.IsAny<T>()để khớp với bất kỳ giá trị nào:

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

Xem phần Đối số phù hợp của sự khởi đầu nhanh chóng.


5
Tôi nhận ra câu trả lời này đã cũ nhưng nếu tôi có nhiều hơn một tham số đơn giản thì sao? Có thể chỉ nói "Bất cứ điều gì mà các loại phù hợp với tất cả các tham số"?
Brandon

6
@Brandon Sau đó, bạn có một It.IsAny <type> () cho mỗi tham số trong đó loại là bất kỳ loại param nào. Nếu bạn muốn, có lẽ bạn có thể viết một hàm trợ giúp thực hiện điều này cho bạn thông qua sự phản chiếu.
dùng441521


3
Đồng ý với các ý kiến ​​khác ở đây: gõ cái này cho bất kỳ phương pháp không tầm thường nào là một nỗi đau lớn.
John Hargrove

Bất kỳ ai có bất kỳ người trợ giúp làm điều này? Hoặc bạn phải viết cho mỗi phương thức một người trợ giúp /
Meysam

18

Hãy thử sử dụng It.IsAny<FinancialYearLookup>()để chấp nhận bất kỳ đối số:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.