Тестовая запись в файл и чтение из файла без параметров

Я хочу проверить функции чтения из файла и записи в файл. Моя проблема в том, что у функций нет параметров. До сих пор я тестировал такие функции только с файлом в качестве параметра. Я просмотрел другие квесты и нашел эти: Как выполнить модульное тестирование метода, который читает заданный файл, Как протестировать запись в файл на Java? но мне они особо не помогли. Код, который я хочу проверить:

public void loadData()
    {
        try(BufferedReader br=new BufferedReader(new FileReader(super.fileName))){
            String line;
            while((line=br.readLine())!=null){
                String[] atributes=line.split(";");
                if(atributes.length!=4)
                    throw new Exception("Linia nu este valida!");
                Student t=new Student(atributes[0],atributes[1],atributes[2],atributes[3]);
                super.save(t);

            }
            Thread.sleep(5000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public synchronized void writeToFile() {
        try (BufferedWriter br = new BufferedWriter(new FileWriter(super.fileName))){
            super.entities.forEach(x -> {
                try {
                    br.write(x.studentFileLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Может ли кто-нибудь дать мне подсказку о том, как проверить это без параметра файла?


person user7167081    schedule 02.06.2017    source источник
comment
Сообщения, на которые вы ссылаетесь, объясняют важный момент: сделать ваш код тестируемым. Тестирование без возможности установки параметра файла не делает код тестируемым. Если вы хотите, чтобы код не тестировался, вы, вероятно, получите способ, полагаясь на плохие методы.   -  person davidxxx    schedule 02.06.2017
comment
Как назначается super.fileName?   -  person slim    schedule 02.06.2017
comment
Кстати, в атрибутах есть двойная буква «t». Я указываю на это только потому, что это так часто повторяется в этом источнике.   -  person slim    schedule 02.06.2017
comment
@slim Источник сделал не я. Файл si из AbstractFileRepository.   -  person user7167081    schedule 02.06.2017
comment
@ user7167081 неважно, кто это написал. Нам нужно знать, как он устанавливается. Насколько нам известно, в суперклассе есть setFilename() или getFilename(), которые решат вашу проблему.   -  person slim    schedule 02.06.2017


Ответы (1)


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

@Deprecated 
public void loadData() {
    loadData(super.fileName);
}

public void loadData(String fileName) {
    // do stuff
}

@Deprecated
public synchronized void writeToFile() {
    writeToFile(super.fileName);
}

public synchronized void writeToFile(String fileName) {
    // do stuff
}
person Andrew S    schedule 02.06.2017