"Cuando" le da la opción de tener diferentes configuraciones para el mismo objeto burlado, dependiendo de lo que tenga que decidir. Supongamos que quiere probar un proveedor de formato que ha escrito. Si el programa (= prueba) se ejecuta por la mañana, una determinada llamada de función debe devolver nulo; por la tarde un cierto valor. Luego puede usar "Cuando" para escribir esas configuraciones condicionales.
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);