2008-12-11 2 views
1

Я пишу код Java, который использует FileReader для загрузки данных из нескольких входных файлов. Я использую TDD довольно сильно, и я хотел бы добавить некоторые тесты, которые гарантируют, что я правильно очищусь, вызвав close() на читателя, когда я покончу с этим. К сожалению, я не могу придумать хороший способ проверить это. У кого-нибудь есть идеи?Подтверждение из теста JUnit, что FileReader был закрыт должным образом

Отредактировано для добавления: Я знаю, что я могу проверить явно для закрытого вызова с использованием макетных объектов, но я хотел бы избежать его, если это возможно, отчасти потому, что я нахожу, что они приводят к несколько более кратковременному коду, а отчасти потому, что я Любопытно, можно ли написать код, который может распознавать эффекты не закрытия файла.)

ответ

1

Если вы можете передать объект FileReader в вызов, вы можете предоставить настраиваемый FileReader с переопределенным методом закрытия - в что у вас есть логическая переменная, которая проверяет закрытие или нет. Затем вы можете использовать это для вашего модульного теста.

6

Я думаю, что способ сделать это - вставить FileReader или Factory, который создает FileReader, в ваш класс. Затем в вашем модульном тесте вы можете ввести макетную версию FileReader и проверить, что был вызван правильный метод. Вы можете посмотреть на JMock, чтобы создать mock FileReader и настроить ожидание вызова метода close.

+0

Я действительно задаюсь вопросом, есть ли способ сделать это без насмешек, но я все же поддержал это за то, что я вообще был хорошим советом. – 2008-12-11 03:50:55

3

Один из способов, который должен работать, - проверить метод ready() после закрытия FileReader, который должен вызывать исключение. Например:

FileReader fr = new FileReader("somefile"); 
// ... file reader activity 
fr.close(); 

// After closing the reader, the ready() method should cause an IOException: 
boolean isOpen = true; 
try { 
    isOpen = fr.ready(); 
} catch (IOException e) { 
    isOpen = false; 
} 
assertFalse("FileReader is still open", isOpen); 
Смежные вопросы