сравнение файлов в фитнесе с использованием Java - PullRequest
0 голосов
/ 17 декабря 2011

Мне нужно сравнить 2 CSV-файла и вывести результаты в новый файл в Fitnesse, используя Java.Пожалуйста, пролите немного света на это, так как я новичок в Fitnesse.Я не понимаю, какие приборы использовать.

Ответы [ 2 ]

2 голосов
/ 17 декабря 2011

Ну, есть два способа приблизиться к этому.Один из них очень активно использует 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, выможно было бы сделать то же самое, что и в любом из примеров, но в кодировании будут некоторые различия.

0 голосов
/ 17 мая 2012

А как насчет прибора FitFibrary's CompareFiles?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...