Ну, есть два способа приблизиться к этому.Один из них очень активно использует FitNesse, а другой просто выполняет свою работу.
Вариант 1. Эффективное использование FitNesse
Предполагая, что один из двух файлов CSV является фиксированным и всегда одинаковым, вы можете создатьприбор, который может прочитать файл и затем сравнить результат с таблицей в вашем тесте FitNesse.Это может выглядеть примерно так:
|Query:list csv data|c:\test\file_to_check.csv|
|col1 |col2 |col3 |
|Joe |12 |red |
|Steve |15 |purple |
Когда тест выполняется, он читает файл и разбивает его на строки и столбцы, используя строку заголовка для соединения значений со столбцами.Затем он возвращает стандартный Slim (я предполагаю, что в данный момент он использует Slim) Список строк, которые сами являются списками имен и пар значений в виде строк.Если все совпадет, вы увидите все зеленым.Если они не совпадают, вы получите ошибки, указывающие на несоответствие.Такой прибор также будет определять пропущенные или лишние строки, и вы увидите их на странице.
Вариант 2: просто сделайте это
Второй вариант, не подходит для FitNesse, но может работать.Эта версия подтолкнет всю проверку в приспособление.В этом случае вы должны написать прибор, который может принять два имени файла в качестве входных данных, а затем выполнить сравнение внутри кода прибора.Тогда это возвратило бы некоторое указание отказов.Это может выглядеть так (но есть и другие проекты, которые тоже могут работать:
|compare csv files|
|file1 |file2 |match?|
|c:\test_file_1.csv|c:\test_file_1.csv|true |
Это будет работать с каким-то кодом, подобным следующему (вам все равно придется выполнить сложную часть сравнения файлов CSV).):
public class CompareCsvFiles {
private String filenameForFirstFile = null;
private String filenameForSecondFile = null;
private String matched = null;
public void setFile1(String filename){
filenameForFirstFile = filename;
}
public void setFile2(String filename){
filenameForSecondFile = filename;
}
public String match(){
return new CsvCompareTool(filenameForFirstFile, filenameForSecondFile).match();
}
private class CsvCompareTool{
private String filename1 = null;
private String filename2 = null;
public CsvCompareTool(String file1, String file2){
filename1 = file1;
filename2 = file2;
}
public String match(){
// create the necessary code to do the comparison here.
// I'll leave that to you.
return "Not implemented yet";
}
}
}
В случае сбоя я бы вернул строку, описывающую строку, в которой произошел сбой.
См. Вопрос о синтаксическом анализаторе CSV для Java Подробнее о разборе файлов CSV.
Заключительные комментарии
Лично я предпочитаю вариант 1. Он использует FitNesse для окончательной проверки и показывает конкретные сбои на странице. Но для этого нужен один файлчтобы получить согласованный ожидаемый результат.
В любом случае, я бы попытался найти библиотеку, которая бы упростила обработку файлов CSV, так как есть несколько забавных правил о том, как избежать экранирования со встроенными запятыми.
Вы также можете создать что-то с помощью таблицы стилей TableTable для этого, но я не рекомендую этого.
Если вы используете FitLibrary, выможно было бы сделать то же самое, что и в любом из примеров, но в кодировании будут некоторые различия.