Метод макету moq з вказанням вхідного параметра


133

У мене є код в тесті, використовуючи Moq:

public class Invoice
{
    ...

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

Тому в одиничному тесті я намагаюся знущатися над цим методом і змусити його повернутись в істину

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

Чи все-таки потрібно писати цей рядок, тому мені не потрібно вказувати вхід IsInFinancialYear. тобто. Так що в коді не вказано, яким вхідним параметром він поверне справжнє все, що йому передано?

Відповіді:


227

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

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

Дивіться розділ " Збіжні аргументи " швидкого початку.


5
Я розумію, що ця відповідь стара, але що робити, якщо у мене є кілька простих параметрів? Чи можна просто сказати "Все, де типи підходять для всіх параметрів"?
Брендон

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


3
Погодьтеся з іншими коментарями тут: введення цього тексту для будь-якого нетривіального методу - головний біль.
Джон Харгров

У когось є помічник, який це робить? Або вам потрібно написати для кожного окремого методу помічник /
Meysam

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.