Я использую Rhino Mocks 3.5 и пытаюсь создать исключение в моем ожидании, чтобы проверить некоторые функции в моем блоке catch.
Но по какой-то причине это не исключение.
_xyz.stub(x => x.function(string)).throw(new exception("test string"));
Итак, я заглушаю вызов функции, чтобы вызвать исключение, но оно не вызывает исключение.
Я не уверен, почему это не работает на тебя. Я создал небольшой образец, и он отлично работает на меня. Взгляните на этот код:
Сначала я создал код, который хочу проверить.
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);
}
Надеюсь, это поможет.
.Возможно, вам понадобится разместить больше информации и больше исходного кода. Моя первая догадка заключается в том, что метод, который вы вставляете, никогда не будет попадать в потребителя.
По мере того, как вы проходите по коду, попадает ли место, где используется _xyz.function(string)?
. Кажется, что если метод, который вы хотите создать исключение, имеет параметры, вам нужно добавить .IgnoreArguments ()
перед .Throw (новое исключение ())
.
Например, я обнаружил, что следующее НЕ генерирует исключение:
queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).Throw(new Exception());
Но следующее будет:
queue.Stub(x => x.Send(messageQueueTransaction, auditEvent)).IgnoreArguments().Throw(new Exception());
Поскольку метод генерации исключений Вадима не имел параметров, он работал без игнорирования аргументов.
Решение для меня было следующим:
_xyz.Stub(x => x.Function(null)).IgnoreArguments().Throw(new Exception("test string"));
Обратите внимание на вызов .IgnoreArguments()
.