Méthode Moq mock sans spécifier de paramètre d'entrée

133

J'ai du code dans un test utilisant Moq:

public class Invoice
{
    ...

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

Donc, dans un test unitaire, j'essaie de me moquer de cette méthode et de la rendre vraie

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

Est-il possible d'écrire cette ligne pour ne pas avoir à spécifier l'entrée IsInFinancialYear. c'est à dire. Pour qu'il ne soit pas dans le code quel est le paramètre d'entrée, il retournera vrai tout ce qui lui est passé?

AnonyMouse
la source

Réponses:

227

Vous pouvez utiliser It.IsAny<T>()pour faire correspondre n'importe quelle valeur:

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

Consultez la section Arguments correspondants du démarrage rapide.

Jeff Ogata
la source
5
Je me rends compte que cette réponse est ancienne, mais que faire si j'ai plus d'un paramètre simple? Est-il possible de dire simplement "Quelque chose où les types correspondent à tous les paramètres"?
Brandon
6
@Brandon Ensuite, vous avez un It.IsAny <type> () pour chaque paramètre où type est le type de ce paramètre. Si vous le souhaitez, vous pouvez probablement écrire une fonction d'assistance qui le fait pour vous via la réflexion.
user441521
3
D'accord avec les autres commentaires ici: taper ceci pour toute méthode non triviale est une douleur majeure.
John Hargrove
Quelqu'un a-t-il une aide pour faire cela? Ou vous devez écrire pour chaque méthode un assistant /
Meysam
18

Essayez d'utiliser It.IsAny<FinancialYearLookup>()pour accepter n'importe quel argument:

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