Как бросить исключение в новые носороги mocks 3.5 - PullRequest
8 голосов
/ 05 января 2010

Я использую rhino mocks 3.5 и пытаюсь сгенерировать исключение, чтобы протестировать некоторые функции в моем блоке catch.

Но почему-то это не исключение.

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

Итак, я заглушаю вызов функции, чтобы вызвать исключение, но оно не вызывает исключение.

Ответы [ 4 ]

14 голосов
/ 06 января 2010

Я не уверен, почему это не работает для вас. Я создал небольшой образец, и он прекрасно работает для меня. Посмотрите на этот код:

Сначала я создал код, который хочу протестировать.

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);
    }

Надеюсь, это поможет.

9 голосов
/ 12 апреля 2010

Похоже, что если метод, который вы хотите вызвать, имеет параметры, вам нужно добавить .IgnoreArguments() перед .Throw(new Exception()).

Например, я обнаружил, что следующее НЕ выдает исключение:

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

Но следующее будет:

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

Поскольку метод выдачи исключений Вадима был без параметров, он работал без игнорирования аргументов.

2 голосов
/ 05 января 2010

Возможно, вам потребуется опубликовать больше информации и больше вашего исходного кода. Мое первое предположение состоит в том, что метод, который вы используете, никогда не попадет в цель.

Когда вы шагаете по коду, попадет ли место, где используется _xyz.function (string)?

1 голос
/ 08 июня 2010

Решение для меня было следующим:

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

Обратите внимание на .IgnoreArguments() звонок.

...