Есть CSV файл в качестве стандарта ресурсов Maven проекта Dir следующим образом:Как читать CSV файл из директории ресурсов в JUnit Test с помощью FileUtils
src/main/resources/fruits.csv
src/test/resources/fruits.csv
fruits.csv
Type, Quantity
apple, 50
banana, 60
orange, 70
Используя следующие библиотеки
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
Фруктовые (стандарт POJO)
public class Fruit {
private String type
private int quantity;
public Fruit(String type, int quantity) {
this.type = type;
this.quantity = quantity;
}
// Getters & Setters
}
CsvFileReader
public class CsvFileReader {
private static final String [] FILE_HEADER = {""};
private static final String TYPE = "Type";
private static final String QUANTITY + "Quantity";
public static List<Candidate> readCsvFile(File fileName) {
FileReader fileReader = null;
CSVParser csvFileParser = null;
CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(FILE_HEADER);
List<Candidate> fruits = null;
try {
fruits = new ArrayList<>();
String file = FileUtils.readFileToString(fileName);
fileReader = new FileReader(file);
csvFileParser = new CSVParser(fileReader, csvFormat);
List<CSVRecord> records = csvFileParser.getRecords();
for (int i = 1; i < records.size(); i++) {
CSVRecord record = records.get(i);
Fruit fruit = new Fruit(record.get(TYPE), Integer.parseInt(QUANTITY));
fruits.add(fruit);
}
}
catch(Throwable t) {
t.printStackTrace();
}
finally {
try {
fileReader.close();
csvFileParser.close();
} catch(IOException e) {
e.printStackTrace();
}
}
return fruits;
}
}
CsvFileReaderTest (JUnit 4 Пример теста):
public class CsvFileReaderTest {
File csvFile = null;
@Before
public void setUp() throws Exception {
String userDir = System.getProperty("user.dir");
String filePath = userDir + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator;
csvFile = FileUtils.getFile(filePath + "fruits.csv");
}
}
Когда я бегу JUnit Test Case внутри Eclipse:
java.io.FileNotFoundException: Type, Quantity
apple, 50
banana, 60
orange, 70
(File name too long)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
Это, кажется, чтение файл, но проблема в том, что FileName слишком длинное?
Что я делаю неправильно?
Весь смысл хранить файлы в SRC/главная/Ресурсы (или src/test/resources) должны иметь доступный файл в качестве ресурса в пути к классам выполнения (соответственно test), а также для загрузки его с помощью ClassLoader. Используйте 'SomeClass.class.getResourceAsStream ("/fruits.csv ")', чтобы получить InputStream над ресурсом. Не используйте файл IO. –
Я предполагаю, что POJO - это просто пример, верно? Поскольку у конструктора отсутствует тип для второго аргумента – Vogel612
Vogel612 - спасибо, что указали, что вне - я сделал соответствующие изменения. @JB Nizet, заявляете ли вы, что я должен запускать тест JUnit через maven вместо запуска через Eclipse? –