2015-02-01 4 views
1

Я новичок в тестировании JUnit, и я хочу написать тест для сохранения CSV-файла. Поскольку метод не имеет возвращаемого значения, я хочу проверить, успешно ли сохранены данные в файле csv. Кто-нибудь знает, как его проверить? Мой класс:Проверка JUnit для saveCSV

private static final String COMMA_DELIMITER = ","; 
private static final String NEW_LINE_SEPARATOR = "\n"; 
private String file_position; 

public SaveCSV(String file_position){ 
    this.file_position = file_position; 
    File file = new File(file_position); 
    file.mkdir(); 
} 

public void savePlayer(HashMap<Integer, Player> Player_HASH) { 
    String fileName = file_position+"player.csv"; 
    String FILE_HEADER = "id,name,color,order" + NEW_LINE_SEPARATOR; 

    FileWriter fileWriter = null; 

    try { 
     fileWriter = new FileWriter(fileName); 
     fileWriter.append(FILE_HEADER.toString()); 

     for(Player player : Player_HASH.values()){ 
      fileWriter.append(String.valueOf(player.getID())); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(player.getName()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(player.getColor().toString()); 
      fileWriter.append(COMMA_DELIMITER); 
      fileWriter.append(String.valueOf(player.getOrder())); 
      fileWriter.append(NEW_LINE_SEPARATOR); 
     } 

    } catch (Exception e) { 
     System.out.println("Error in CsvFIleWriter!"); 
     e.printStackTrace(); 
    } finally { 
     try { 
      fileWriter.flush(); 
      fileWriter.close(); 
     } catch (IOException e) { 
      System.out.println("Error while flushing/closing fileWriter!"); 
      e.printStackTrace(); 
     } 
    } 
} 

ответ

0

Прямой вперед способ проверить это будет запускать код и читать вывод. Я бы первым предложить изменения SaveCSV взять в File (который является более типобезопасный чем String) и не создавать каталог в конструкторе (так как делает работу в конструкторе проблематично):

public SaveCsv { 
    private final File file; 

    public SaveCsv(File file){ 
    this.file = file 
    } 

    public void savePlayer(Map<Integer, Player> playerHash) { 
    if (!file.exists()) { 
     file.mkdir(); 
    } 
    ... 
    } 
} 

Тогда вы можете проверить это следующим образом:

@RunWith(JUnit4.class) 
public class SaveCsvTest { 
    @Rule 
    public TemporaryFolder testFolder = new TemporaryFolder(); 

    @Test 
    public void savePlayerShouldWriteCsv() { 
    File file = testFolder.newFolder("folder"); 
    SaveCsv saveCsv = new SaveCsv(file); 
    InputStream stream = new FileInputStream(file); 
    Reader reader = new InputStreamReader(
     stream, StandardCharsets.UTF_8); 
    // compare contents of data 
    } 

Если вы хотите, чтобы избежать записи в реальный файл в тесте, я предложил бы иметь конструктор CharSink класса SaveCsv использовать гуавы в.

Редактировать: Кроме того, savePlayer можно упростить, используя try with resources.

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