没有指定输入参数的Moq模拟方法


133

我在使用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。即。因此,无论代码中输入了什么参数,它都不会返回true,无论传递给它的是什么?

Answers:


227

您可以It.IsAny<T>()用来匹配任何值:

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

请参阅快速入门的“ 匹配参数”部分。


5
我知道这个答案很旧,但是如果我有多个简单参数怎么办?是否可能只说“类型适合所有参数的任何内容”?
布兰登

6
@Brandon然后,每个参数都有一个It.IsAny <type>(),其中type是该参数是什么类型。如果您愿意,可以编写一个帮助函数,通过反射为您完成此任务。
user441521'9


3
同意这里的其他评论:为任何非平凡的方法键入此命令是一个主要的难题。
约翰·哈格罗夫

有人有帮助吗?或者,您必须为每种方法编写一个助手/
Meysam

18

尝试使用It.IsAny<FinancialYearLookup>()接受任何参数:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.