2013-09-05 3 views
2

Я хочу проверить, что обработка данного экземпляра сообщения приводит к сбою обработки. Однако я не вижу способа сделать это, так как любые исключения, возникающие в обработчике, не доходят до кода тестирования, и для этого не существует ничего встроенного.nservicebus 3.2 проверка ожидаемого отказа

В идеале я хотел бы сделать это:

Test.Handler<TransactionCreatedHandler>() 
        .ExpectFailure() 
        .OnMessage(financialTransaction, Guid.NewGuid().ToString()); 

Я знаю, что правильно то, чтобы удалить любой код обработки из обработчика и проверить, что в изоляции, но я все же хотел бы знать, если есть способ сделать это.

У кого-нибудь есть идеи?

+0

Вне расширения класса Handler самостоятельно я не вижу возможности. –

ответ

2

Я работал над этим поведением, обернув Test.Handler в попытке и поймав TargetInvocationException, а затем утвердив против InnerException.

try 
{ 
    Test.Handler<TransactionCreatedHandler>() 
     .OnMessage(financialTransaction, Guid.NewGuid().ToString()); 
} 
catch (TargetInvocationException ex) 
{ 
    // Asserts against ex.InnerException 
    ... 
} 

Это, очевидно, создает риск того, что изменения в реализации NSB будет нарушать эти тесты, хотя это один я готов взять на себя.

Включает комментарий от Daniel Marbach:

В версии 5 и выше поведение изменилось. Библиотека тестирования больше не генерирует исключение TargetInvocationException, а фактическое исключение, которое произошло в методе дескриптора. Просто голова вверх -

+0

В версии 5 и выше поведение изменилось. Библиотека тестирования больше не генерирует исключение TargetInvocationException, а фактическое исключение, которое произошло в методе дескриптора. Просто голова –

+0

@ ДаниэльМарбах благодарю вас за это. Я обновил ответ, чтобы задуматься. –

Смежные вопросы