Método Mock Mock sin especificar el parámetro de entrada


133

Tengo un código en una prueba usando Moq:

public class Invoice
{
    ...

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

Entonces, en una prueba unitaria, estoy tratando de burlarme de este método y hacer que regrese verdadero

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

¿Hay alguna forma de escribir esta línea para que no tenga que especificar la entrada IsInFinancialYear? es decir. Para que no aparezca en el código cuál es el parámetro de entrada, ¿devolverá verdadero lo que se le haya pasado?

Respuestas:


227

Puede usar It.IsAny<T>()para hacer coincidir cualquier valor:

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

Consulte la sección Argumentos coincidentes del inicio rápido.


55
Me doy cuenta de que esta respuesta es antigua, pero ¿qué pasa si tengo más de un parámetro simple? ¿Es posible decir simplemente "Cualquier cosa donde los tipos se ajusten a todos los parámetros"?
Brandon

66
@Brandon Entonces tiene un It.IsAny <type> () para cada parámetro donde type es el tipo que sea ese parámetro. Si lo desea, probablemente podría escribir una función auxiliar que lo haga por reflexión.
user441521


3
De acuerdo con los otros comentarios aquí: escribir esto para cualquier método no trivial es un gran dolor.
John Hargrove

¿Alguien tiene algún ayudante que haga esto? O tiene que escribir para cada método un ayudante /
Meysam

18

Intenta usar It.IsAny<FinancialYearLookup>()para aceptar cualquier argumento:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.