Método de simulação Moq sem especificar o parâmetro de entrada


133

Eu tenho algum código em um teste usando o Moq:

public class Invoice
{
    ...

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

Então, em um teste de unidade, estou tentando zombar desse método e fazê-lo retornar verdadeiro

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

Existe alguma maneira de escrever esta linha para que eu não precise especificar a entrada para IsInFinancialYear. ie Para que no código não seja qual o parâmetro de entrada, ele retornará verdadeiro, independentemente do que for passado para ele?

Respostas:


227

Você pode usar It.IsAny<T>()para corresponder a qualquer valor:

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

Consulte a seção Argumentos correspondentes do início rápido.


5
Sei que essa resposta é antiga, mas e se eu tiver mais de um parâmetro simples? É possível apenas dizer "Qualquer coisa em que os tipos sejam adequados para todos os parâmetros"?
Brandon

6
@Brandon Então você tem um It.IsAny <type> () para cada parâmetro em que type é qualquer tipo de parâmetro. Se você quiser, provavelmente poderá escrever uma função auxiliar que faça isso por meio de reflexão.
user441521


3
Concorde com os outros comentários aqui: digitar isso para qualquer método não trivial é uma grande dor.
John Hargrove

Alguém tem algum ajudante que faça isso? Ou você tem que escrever para cada método único ajudante /
Meysam

18

Tente usar It.IsAny<FinancialYearLookup>()para aceitar qualquer argumento:

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.