2013-08-04 3 views
0

Это мой тест до сих пор:Почему этот Expect Exception не работает?

@Test(expected = FileNotFoundException.class) 
public void testExpectedException() { 
    UserDataObject u = new UserDataObject("rob123", "Smith", "Robert", "Danny", 1); 
    FlatFileStorage ffstorage = new FlatFileStorage(); 
    ffstorage.verifyUser(u, "dsfsdfsfdsdf.txt"); 

Однако тест, кажется, не получится! Несмотря на то, когда я запускаю его, сообщение об ошибке на самом деле печатается из метода на консоли тоже, как этот

dsfsdfsfdsdf.txt (The system cannot find the file specified) 

Я пропускаю что-то действительно очевидное здесь?

EDIT ** Вот метод, я на самом деле тестирования

public void verifyUser(UserDataObject u, String filename) { 

    String eachline = ""; 
    String uname = u.getUsername(); 
    Scanner sc; 


    try { 
     BufferedReader br = new BufferedReader(new FileReader(new File(filename))); 

      StringBuilder sb = new StringBuilder(); 
      while ((eachline = br.readLine())!=null) 
      { 
       if(eachline.indexOf("Username: " + uname)!=-1) 
       { 
        int lineStart = eachline.indexOf("Username: " + uname); 
        int lineEnd = eachline.indexOf("end" + uname + ";"); 
        int unameLength = uname.length(); 

        String lineStatus = eachline.substring(lineStart, lineEnd + 4 + unameLength); 
        //System.out.println(lineStatus); 

        String newLineStatus = lineStatus.replace("VerifyStatus: 0", "VerifyStatus: 1"); 

        sb.append(newLineStatus+"\n"); 

       }else{ 
        sb.append(eachline+"\n"); 
       } 
      } 
      br.close(); 
      BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filename))); 
      PrintWriter out = new PrintWriter(bw); 
      out.print(sb.toString()); 
      out.flush(); 
      out.close(); 
      } catch (FileNotFoundException e) { 
       System.out.println("Error: Could not find database/storage."); 
       System.out.println(e.getMessage()); 
       e.printStackTrace(); 
       } catch (IOException e) { 
        System.out.println("There has been an error: " + e.getMessage()); 
        e.printStackTrace(); 
      } 

} 
+1

Есть ли у вас трассировку стека исключений? – Thilo

+2

Убедитесь, что исключение фактически является 'FileNotFoundException', поскольку' IOException' может отображать это же сообщение. –

+0

Стоп-файл распечатывается «java.io.FileNotFoundException: dsfsdfsfdsdf.txt (система не может найти указанный файл)« – DeaIss

ответ

3

Ваш тест не работает, потому что вы ожидаете исключение FileNotFoundException, но оно не актуально выбрано из метода. Зачем? Из-за оболочки try/catch, которая проглатывает исключение, печатайте трассировку стека только на выходе.

Изменить подвох блок для

catch (FileNotFoundException e) { 
      System.out.println("Error: Could not find database/storage."); 
      System.out.println(e.getMessage()); 
      throw e; 
      } 

и испытания будут проходить

+0

Спасибо! Тест работал :) – DeaIss

+0

Обычно вы хотите регистрироваться или бросать. Не оба. Если выбрано исключение, вызывающий абонент будет записывать его в случае необходимости. – fgb

3

Вопрос заключается в том, что ваш метод verifyUser(UserDataObject u, String filename) ловит оба исключения FileNotFoundException и IOException и, следовательно, не распространяется на ваш метод тестирования.

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