Pregunta

Estoy intentando implementar alguna lógica de reintento si hay una excepción en mi código.Escribí el código y ahora estoy intentando que Rhino Mocks simule el escenario.La esencia del código es la siguiente:

class Program
    {
        static void Main(string[] args)
        {
            MockRepository repo = new MockRepository();
            IA provider = repo.CreateMock<IA>();

            using (repo.Record()) 
            {
                SetupResult.For(provider.Execute(23))
                           .IgnoreArguments()
                           .Throw(new ApplicationException("Dummy exception"));

                SetupResult.For(provider.Execute(23))
                           .IgnoreArguments()
                           .Return("result");
            }

            repo.ReplayAll();

            B retryLogic = new B { Provider = provider };
            retryLogic.RetryTestFunction();
            repo.VerifyAll();
        }
    }

    public interface IA
    {
        string Execute(int val);
    }

    public class B
    {
        public IA Provider { get; set; }

        public void RetryTestFunction()
        {
            string result = null;
            //simplified retry logic
            try
            {
                result = Provider.Execute(23);
            }
            catch (Exception e)
            {
                result = Provider.Execute(23);
            }
        }
    }

Lo que parece suceder es que la excepción se lanza cada vez en lugar de sólo una vez.¿Cómo debo cambiar la configuración?

¿Fue útil?

Solución

Debe utilizar Expect.Call en lugar de SetupResult:

        using (repo.Record())
    {
        Expect.Call(provider.Execute(23))
                   .IgnoreArguments()
                   .Throw(new ApplicationException("Dummy exception"));

        Expect.Call(provider.Execute(23))
                   .IgnoreArguments()
                   .Return("result");
    }

La wiki de Rhino.Mocks dice:

El uso de SetupResult.For() omite por completo el modelo de expectativas en Rhino Mocks

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top