Подтверждение из теста JUnit, что FileReader был закрыт должным образом - PullRequest
1 голос
/ 11 декабря 2008

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

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

Ответы [ 3 ]

6 голосов
/ 11 декабря 2008

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

3 голосов
/ 11 декабря 2008

Один из способов, который должен работать, - это проверить метод 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);
1 голос
/ 11 декабря 2008

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

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