Se è necessario impostare un valore restituito, nonché verificare quante volte è stata richiamata l'espressione, è possibile farlo in un'unica istruzione?Moq - È possibile specificare in un programma di installazione i criteri di verifica (ad esempio tempi di chiamata)?
Da quello che posso raccogliere, l'installazione di Moq (SomeExpression) .Verifiable() chiamata insieme a Verify(), fondamentalmente fa una verifica (SomeExpression, Times.AtLeastOnce)? cioè, verifica che l'espressione fosse chiamata solo.
Ecco un esempio per spiegare meglio la domanda. Per un'interfaccia:
interface IFoo
{
int ReturnSomething();
}
sono le seguenti due blocchi equivalenti (diverso dal primo verificherà tutte le impostazioni contrassegnati come verificabile)?
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1).Verifiable();
mock.Verify();
}
e
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1);
mock.Verify((m) => m.ReturnSomething(), Times.AtLeastOnce());
}
Se avessi voluto verificare il numero di chiamate (diciamo due volte), è questo l'unico modo in cui l'espressione viene ripetuta per la configurazione e verificare?
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1);
mock.Verify((m) => m.ReturnSomething(), Times.Exactly(2));
}
Semplicemente non mi piace dover chiamare l'installazione e verificare. Bene, poiché questa è una buona idea per AAA, per riformulare, non mi piace dover ripetere l'espressione per l'installazione e la verifica. Al momento memorizzo l'espressione in una variabile e la passo a ciascun metodo, ma non mi sento così pulito.
PS - Il contesto per questo è per una verifica di prova quando una cache è aggiornato o meno (scadenze, ecc)
Questo è l'utilizzo di Moq 4 (ho visto vecchi frammenti di codice dove ci sono metodi su ISetup come AtMostOnce) – GregS