Exception Rhino模拟命令回复,抛出异常问题

Exception Rhino模拟命令回复,抛出异常问题,exception,mocking,rhino-mocks,Exception,Mocking,Rhino Mocks,如果代码中出现异常,我将尝试实现一些重试逻辑。我已经编写了代码,现在我正试图让Rhino Mocks来模拟这个场景。代码的jist如下所示: class Program { static void Main(string[] args) { MockRepository repo = new MockRepository(); IA provider = repo.CreateMock<IA>()

如果代码中出现异常,我将尝试实现一些重试逻辑。我已经编写了代码,现在我正试图让Rhino Mocks来模拟这个场景。代码的jist如下所示:

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);
            }
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
MockRepository repo=新建MockRepository();
IA provider=repo.CreateMock();
使用(repo.Record())
{
SetupResult.For(provider.Execute(23))
.IgnoreArguments()
.Throw(新的ApplicationException(“伪异常”));
SetupResult.For(provider.Execute(23))
.IgnoreArguments()
.返回(“结果”);
}
repo.ReplayAll();
B retryLogic=newb{Provider=Provider};
retryLogic.RetryTestFunction();
回购协议验证全部();
}
}
公共接口
{
字符串执行(int-val);
}
公共B级
{
公共IA提供程序{get;set;}
public void RetryTestFunction()
{
字符串结果=null;
//简化的重试逻辑
尝试
{
结果=Provider.Execute(23);
}
捕获(例外e)
{
结果=Provider.Execute(23);
}
}
}

似乎每次都会抛出异常,而不是只抛出一次。我应该将设置更改为什么?

您需要使用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");
    }
犀牛。Mocks维基说