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é?

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.


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);

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.