2016-05-12 3 views
2

Я пытаюсь проверить исключение и сообщение, но у меня есть имя файла в этом сообщении, которое является переменной. Можно ли это сделать с помощью модульного теста одним способом?Возможно ли передать сообщение в ExpectedException?

public static string FileName 
     { 
      get 
      { 
       return "EXT_RF_ITAUVEST_201605091121212"; 
      } 
     } 

     [TestMethod()] 
     [ExpectedException(typeof(Exception), String.Format("Error on file {0}", FileName))] 
     public void ValidarNomeArquivo_DataNomeIncorreta_Mensagem() 
     { 
      throw new Exception(String.Format("Error on file {0}", FileName)); 
     } 

Код выше возвращает ошибку «Аргумент атрибута должен быть постоянным выражением, TypeOf выражения создания выражения или массива типа параметра атрибута.».

+0

Код, который у вас есть, подтверждает, что 'Exception' генерирует исключение должным образом. Я ожидаю, что вы захотите проверить/ваш/код, а не Microsoft. В этом случае имя файла будет, как обычно, выбрано из вашего класса/метода. – AlG

+0

Существует приложение консоли, которое считывает базу данных, получает имя файла и службу URL-адреса, затем создает экземпляр и вызывает метод, передающий имя файла как свойство объекта. Причина, по которой мне нужно исключить исключение, заключается в том, что приложение Консоль обрабатывает, чтобы регистрировать и отправлять электронную почту. Но этот метод тестирования, который я создаю, заключается в проверке только проверки файла, поэтому я думаю, что весь этот процесс не имеет значения в данный момент. –

ответ

2

В вашей ситуации я бы не использовал ExpectedException и вместо этого просто вручную выполнял логику.

public static string FileName 
    { 
     get 
     { 
      return "EXT_RF_ITAUVEST_201605091121212"; 
     } 
    } 

    [TestMethod()] 
    public void ValidarNomeArquivo_DataNomeIncorreta_Mensagem() 
    { 
     //This try block must contain the entire function's logic, 
     // nothing can go after it to get the same behavor as ExpectedException. 
     try 
     { 
      throw new Exception(String.Format("Error on file {0}", FileName)); 

      //This line must be the last line of the try block. 
      Assert.Fail("No exception thrown"); 
     } 
     catch(Exception e) 
     { 
      //This is the "AllowDerivedTypes=false" check. If you had done AllowDerivedTypes=true you can delete this check. 
      if(e.GetType() != typeof(Exception)) 
       throw; 

      if(e.Message != String.Format("Error on file {0}", FileName)) 
       throw; 

      //Do nothing here 
     } 
    } 
+0

На самом деле, я должен убедиться, что этот TestMethod выдает исключение, затем я изменил источник из Scott Chamberlain, вставив ExpectedException и изменив сигнал! = На ==, чтобы проверить тип исключения и возвращенное сообщение. Большое спасибо Скотту. –

+1

Я исправил его, поэтому теперь он проверяет, что исключение всегда выбрасывается. Вам просто нужно поставить 'Assert.Fail (' в конце блока try. –

+0

Я новичок в StackOverflow. Попробуйте поместить здесь код, но я думаю, что это не разрешено. Вместо того, чтобы бросать новое исключение (String. Формат («Ошибка в файле {0}», имя_файла)); У меня есть метод для проверки имени файла ValidateFileName (IncorrectFileName); В этом методе мне нужно задать исключение, если имя файла недопустимо. .Fail действительно исправляет его. Еще раз спасибо. –

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