使用RhinoMocks存根返回值然后返回异常

时间:2014-12-31 16:24:28

标签: c# unit-testing rhino-mocks

我有以下情况。

我使用RhinoMocks来模拟我的一项服务。存根的初始动作是增加一个呼叫计数,在随后的呼叫中我想抛出异常......我该怎么做?

这就是我现在所拥有的,我在TestFixtureSetup方法中设置了这个

    var mockBLL = MockRepository.GenerateMock<IBLL>();

    mockBLL.Stub(x => x.SaveOrUpdateDTO(null, null)).IgnoreArguments().WhenCalled
                (invocation =>
                {
                    nSaveOrUpdateCount++;
                });

    SimpleIoc.Default.Register<IBLL>(() => mockBLL);

在我的测试用例中,我的一个对象将从IoC中读取,然后调用&#34; SaveOrUpdateDTO&#34;方法。第一个测试用例检查计数是否正确,第二个测试用例将尝试捕获异常。

我的初期是创建另一个模拟,然后在第二个测试用例之前重新注册它,但我不认为这是最好的方法。

有关如何生成两个不同存根的任何想法,一个调用一个动作,另一个抛出异常?

1 个答案:

答案 0 :(得分:2)

也许这会有所帮助,你能尝试一下吗?

var mockBLL = MockRepository.GenerateMock<IBLL>();

mockBLL.Stub(x => x.SaveOrUpdateDTO(null, null))
                   .IgnoreArguments()
                   .Repeat.Twice()           // Allow to be called twice
                   .WhenCalled(invocation =>
            {
                if (nSaveOrUpdateCount > 0)  // throw an exception if 2nd invocation
                    throw new Exception();

                nSaveOrUpdateCount++;
            });

SimpleIoc.Default.Register<IBLL>(() => mockBLL);