Rhino издевается приказал ответить, бросить исключение проблемы - PullRequest
0 голосов
/ 19 сентября 2008

Я пытаюсь реализовать некоторую логику повторов, если в моем коде есть исключение. Я написал код и теперь пытаюсь заставить Rhino Mocks смоделировать сценарий. Суть кода в следующем:

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

Кажется, что происходит то, что исключение выдается каждый раз, а не один раз. Что я должен изменить настройку, чтобы быть?

1 Ответ

2 голосов
/ 19 сентября 2008

Вам нужно использовать Expect.Call вместо SetupResult:

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

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

Вики Rhino.Mocks говорит,

Использование SetupResult.For () полностью обходит модель ожиданий в Rhino Mocks

...