Rhino издевается над заказанным ответом, выдает проблему с исключением

StackOverflow https://stackoverflow.com/questions/103557

  •  01-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь реализовать некоторую логику повторных попыток, если в моем коде есть исключение.Я написал код и теперь пытаюсь заставить 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);
            }
        }
    }

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

Это было полезно?

Решение

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

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

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

Носорог.Издевается над вики, говорит,

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top