web-dev-qa-db-fra.com

Méthode Moq sans spécification du paramètre d'entrée

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 afin que je n'ai pas à spécifier l'entrée dans IsInFinancialYear. c'est à dire. Pour que le paramètre d'entrée ne soit pas indiqué dans le code, il retournera true quel que soit ce qui lui est transmis?

119
AnonyMouse

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

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

Voir la section Arguments correspondants du guide de démarrage rapide.

200
Jeff Ogata

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

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

Vous pouvez essayer ce qui suit:

https://7pass.wordpress.com/2014/05/20/moq-setup-and-ignore-all-arguments/

Permet:

mock
.SetupIgnoreArgs(x => x.Method(null, null, null)
.Return(value);
5
NDC