如何在新的犀牛嘲笑3.5中抛出异常

ali*_*ce7 8 c# testing unit-testing rhino-mocks

我正在使用rhino mocks 3.5并且我试图在我的期望中抛出异常来测试我的catch块中的一些功能.

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

_xyz.stub(x => x.function(string)).throw(new exception("test string"));
Run Code Online (Sandbox Code Playgroud)

所以,我正在调用函数来抛出异常,但它没有抛出异常.

Vad*_*dim 14

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

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

public interface IXyz
{
    void Foo();
}

public class Xyz : IXyz
{
    public void Foo()
    {
    }
}

public class Sut
{
    public void Bar(IXyz xyz)
    {
        xyz.Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来我将创建一个测试方法.在这种情况下,我使用的是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);
    }
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


Lis*_*isa 9

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

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

queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).Throw(new Exception());
Run Code Online (Sandbox Code Playgroud)

但以下是:

queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).IgnoreArguments().Throw(new Exception());
Run Code Online (Sandbox Code Playgroud)

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