не только выброс исключения, но и сообщение которое оно содержит.
Code Snippet
- /// <summary>
- /// Проверяет выброшенное исключение
- /// </summary>
- public static class ExceptionAssert{
- private const string NotException="Исключение не выброшено.";
- private const string NotTypeexception="Выброшено исключение не того типа. Тип: ";
- private const string NotMessage="Исключение не содержит указанное сообщение. Сообщение: ";
- /// <summary>
- /// Проверяет выброс исключения заданного типа
- /// </summary>
- /// <typeparam name="T">Тип исключения</typeparam>
- /// <param name="action">Делегат для проверки</param>
- /// <exception cref="ArgumentNullException"></exception>
- /// <exception cref="AssertFailedException"></exception>
- public static void Validate<T>(Action action) where T:Exception{
- if(action==null)
- throw new ArgumentNullException("action");
- ValidateExitAndType<T>(action);
- }
- /// <summary>
- /// Проверяет выброс исключения заданного типа
- /// и наличия в нём указанного сообщения
- /// </summary>
- /// <typeparam name="T">Тип исключения</typeparam>
- /// <param name="action">Делегат</param>
- /// <param name="message">Сообщение</param>
- /// <exception cref="ArgumentNullException"></exception>
- /// <exception cref="AssertFailedException"></exception>
- public static void Validate<T>(Action action,string message) where T:Exception{
- if(action==null)
- throw new ArgumentNullException("action");
- if(message==null)
- throw new ArgumentNullException("message");
- var exception=ValidateExitAndType<T>(action);
- if(exception.Message!=message)
- throw new AssertFailedException(NotMessage+exception.Message);
- }
- //проверяет выброс и тип исключения
- private static Exception ValidateExitAndType<T>(Action action) where T:Exception{
- var exception=GetException(action);
- ValidateException<T>(exception);
- return exception;
- }
- //получает ислючение выброшенное в делегате
- private static Exception GetException(Action action){
- try{
- action();
- } catch(Exception e){
- return e;
- }
- return null;
- }
- //проверяет наличие и тип исключения
- private static void ValidateException<T>(Exception exception) where T:Exception{
- if(exception==null)
- throw new AssertFailedException(NotException);
- if(!(exception is T))
- throw new AssertFailedException(NotTypeexception+exception.GetType());
- }
- }
Комментариев нет:
Отправить комментарий