Frage

Ich versuche, einige Wiederholungslogik zu implementieren, wenn es eine Ausnahme in meinem Code ist. Ich habe den Code geschrieben und jetzt versuche ich Rhino Mocks zu bekommen, um das Szenario zu simulieren. Der jist des Codes ist die folgende:

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);
            }
        }
    }

Was zu geschehen scheint, ist, dass die Ausnahme jedes Mal, anstatt nur einmal geworfen wird. Was soll ich das Setup zu ändern sein?

War es hilfreich?

Lösung

Sie müssen Expect.Call verwenden statt SetupResult:

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

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

Das Rhino.Mocks Wiki sagt:

  

Mit SetupResult.For () vollständig die Erwartungen Modell umgeht in Rhino Mocks

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top