Moq фиктивный метод без указания входного параметра


134

У меня есть код в тесте с использованием Moq:

public class Invoice
{
    ...

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

Итак, в модульном тесте я пытаюсь имитировать этот метод и вернуть его true

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

Есть ли способ написать эту строку, чтобы мне не нужно было указывать ввод IsInFinancialYear. то есть. Чтобы в коде не было входного параметра, он вернет истину, что бы ему ни передали?

Ответы:


229

Вы можете использовать It.IsAny<T>()для соответствия любому значению:

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

См. Раздел « Сопоставление аргументов » в кратком руководстве.


5
Я понимаю, что это старый ответ, но что, если у меня более одного простого параметра? Можно ли просто сказать: «Все, что соответствует всем параметрам»?
Brandon

6
@Brandon Тогда у вас есть It.IsAny <type> () для каждого параметра, где тип - это любой тип этого параметра. При желании вы, вероятно, могли бы написать вспомогательную функцию, которая сделает это за вас через отражение.
user441521 08


3
Согласитесь с другими комментариями здесь: печатать это для любого нетривиального метода - большая проблема.
Джон Харгроув

У кого-нибудь есть помощник, который это делает? Или вам нужно написать для каждого отдельного метода помощника /
Мейсам

18

Попробуйте использовать, It.IsAny<FinancialYearLookup>()чтобы принять любой аргумент:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.