Con Moq, è possibile verificare che un metodo sia mai chiamato con determinati argomenti (ovvero argomenti che soddisfano determinati predicati) utilizzando Times.Never
.Perché non c'è un Times. Sempre in Moq?
Ma come verificare che, no mater quante volte viene chiamato un metodo, è sempre chiamato con determinati argomenti??
Il valore predefinito è Times.AtLeastOnce
.
Non c'è Times.Always
. Mi manca qualcosa di ovvio? Grazie!
Modifica: Ho inviato un suggerimento alla mailing list di Moq la scorsa settimana, ma non sembra che sia stato ancora moderato. Pubblicherò qualsiasi aggiornamento qui.
Modifica: un esempio. Diciamo che sto testando una classe che genera documenti XML. Voglio assicurarmi che vengano generati solo documenti validi. In altre parole, verifica che la dipendenza dello scrittore sia sempre uguale a dato i documenti validi, con un numero di sequenza valido, da scrivere.
should_only_write_valid_xml_documents
Mock.Get(this.writer).Verify(
w => w.Write(
It.Is<XDocument>(doc => XsdValidator.IsValid(doc)),
It.Is<int>(n => n < 3)),
Times.Always);
"sempre" implica sapere quante volte "sempre "lo è, e se lo sapete, perché non usare invece Times (n)? – mtijn
No, non è questo il punto della domanda. Immagina un metodo chiamato in un ciclo le cui dimensioni sono determinate dinamicamente. –
quindi dentro l'iterazione del ciclo controllerei che il metodo sia stato chiamato una volta, ancora e ancora e ancora. questo presuppone che il ciclo sia nel codice di test. se invece è nel codice da testare, allora mi piacerebbe riprogettare la testabilità in modo da poter collegare il codice di loop per controllare ogni chiamata di metodo. – mtijn