He una interfaz definida comoMOQ - la creación de un método basado en valores de argumento (múltiples argumentos)
interface IMath
{
AddNumbersBetween(int lowerVal, int upperVal);
}
que puede configurar un Moq básico para lo anterior de la siguiente manera:
Mock<IMath> mock = new Mock<IMath>();
mock.Setup(m => m.AddNumbersBetween(It.IsAny<int>(), It.IsAny<int>()));
llamada que
mock.Object.AddNumbersBetween(1,4);
y luego verifique que se llama
mock.Verify(m => m.AddNumbersBetween(1,4), Times.AtleastOnce());
me puedo imaginar cómo configurar los AddNumbersBetween método tal que si el upperVal es inferior a la lowerVal se produce una excepción
mock.Object.AddNumbersBetween(4,1);//should throw an exception
Esencialmente buscando algo como:
mock.Setup(foo => foo.AddNumbersBetween("arg1 is higher than arg2")).Throws<ArgumentException>();
Recomendaría simplemente implementar la lógica de lanzamiento de excepción con una Devolución de llamada, ya que eso le da acceso completo a ambos parámetros. Hasta donde yo sé, las cláusulas de coincidencia de parámetros solo pueden realizar una lógica basada en un solo parámetro. –