"Quando" ti dà la possibilità di avere impostazioni diverse per lo stesso oggetto deriso, a seconda di qualsiasi cosa tu debba decidere. Diciamo che vuoi testare un fornitore di formati che hai scritto. Se il programma (= test) viene eseguito la mattina, una determinata chiamata di funzione dovrebbe restituire null; nel pomeriggio un certo valore. Quindi puoi usare "Quando" per scrivere quelle impostazioni condizionali.
var mockedService = new Mock<IFormatProvider>();
mockedService.When(() => DateTime.Now.Hour < 12).Setup(x => x.GetFormat(typeof(string))).Returns(null);
mockedService.When(() => DateTime.Now.Hour >= 12).Setup(x => x.GetFormat(typeof(string))).Returns(42);