2011-10-19 11 views
91

ho qualche codice in un test utilizzando Moq:Moq metodo finto con il parametro di ingresso fuori specifica

public class Invoice 
{ 
    ... 

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

Quindi, in una prova di unità che sto cercando di prendere in giro questo metodo e farla tornare vero

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

Esiste comunque la possibilità di scrivere questa riga in modo da non dover specificare l'input su IsInFinancialYear. vale a dire. In modo che non nel codice quale sia il parametro di input restituirà true qualunque sia passato ad esso?

risposta

161

È possibile utilizzare It.IsAny<T>() per adattarsi a qualsiasi valore:

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

Vedere la sezione Matching Arguments del quick start.

+1

Grazie per il link! – AnonyMouse

+4

Mi rendo conto che questa risposta è vecchia ma cosa succede se ho più di un parametro semplice? È possibile semplicemente dire "Qualunque cosa in cui i tipi si adattano a tutti i parametri"? – Brandon

+1

@Brandon Quindi hai un It.IsAny () per ogni parametro in cui type è qualsiasi tipo di parametro. Se volessi potresti probabilmente scrivere una funzione di aiuto che fa questo per te attraverso la riflessione. – user441521

16

Provate utilizzando It.IsAny<FinancialYearLookup>() di accettare qualsiasi argomento:

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