【问题标题】:How to throw exception in new rhino mocks 3.5如何在新的 rhino mocks 3.5 中抛出异常
【发布时间】:2011-01-01 17:51:25
【问题描述】:

我正在使用 rhino mocks 3.5 并试图抛出一个异常,以测试我的 catch 块中的某些功能。

但由于某种原因,它没有抛出异常。

_xyz.stub(x => x.function(string)).throw(new exception("test string"));

所以,我将调用函数以抛出异常,但它没有抛出异常。

【问题讨论】:

    标签: c# unit-testing testing rhino-mocks


    【解决方案1】:

    我不确定为什么它不适合你。我创建了一个小样本,它对我来说很好用。看看这段代码:

    首先我创建了我想要测试的代码。

    public interface IXyz
    {
        void Foo();
    }
    
    public class Xyz : IXyz
    {
        public void Foo()
        {
        }
    }
    
    public class Sut
    {
        public void Bar(IXyz xyz)
        {
            xyz.Foo();
        }
    }
    

    接下来我要创建一个测试方法。在这种情况下,我使用的是 MbUnit,但它应该适用于任何单元测试框架。

        [Test]
        [ExpectedException(typeof(ArgumentException), Message = "test string")]
        public void BarFoo_Exception()
        {
            IXyz xyzStub = MockRepository.GenerateStub<IXyz>();
            xyzStub.Stub(x => x.Foo()).Throw(new ArgumentException("test string"));
            new Sut().Bar(xyzStub);
        }
    

    我希望这会有所帮助。

    【讨论】:

    • 可能是我忘记添加 {ExpectedException line on the top of the test]。
    【解决方案2】:

    看来,如果要抛出异常的方法有参数,那么你需要在.Throw(new Exception())之前添加.IgnoreArguments()

    例如,我发现以下不会抛出异常:

    queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).Throw(new Exception());
    

    但以下会:

    queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).IgnoreArguments().Throw(new Exception());
    

    因为 Vadim 的异常抛出方法是无参数的,所以它可以在不忽略参数的情况下工作。

    【讨论】:

      【解决方案3】:

      您可能需要发布更多信息和更多源代码。我的第一个猜测是你存根的方法永远不会在消费者中受到影响。

      当你单步执行代码时,使用 _xyz.function(string) 的地方会被击中吗?

      【讨论】:

      • 是的,它被击中了。但不知何故,它没有返回异常。
      【解决方案4】:

      我的解决方案如下:

      _xyz.Stub(x => x.Function(null)).IgnoreArguments().Throw(new Exception("test string"));
      

      注意.IgnoreArguments() 调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多