2015-11-06 21 views
1

Я использую Jimfs в моих тестах, как это:Должен ли я очищать свою файловую систему Jimfs после каждого теста?

public class FooTest { 
    private FileSystem fs = Jimfs.newFileSystem(Configuration.unix()); 
    private List<Path> paths = new ArrayList<>(); 
    private Path getPath(String first, String... more) { 
    Path path = fs.getPath(first, more); 
    paths.add(path); 
    return path; 
    } 
    @After public void cleanPaths() { 
    for (Path path: paths) { 
     Files.walkFileTree(path, FileVisitors.DELETE); 
    } 
    } 
    @Test public void bar() { 
    Path baz = getPath("baz"); 
    // test using baz 
    } 
} 

Теперь мы знаем, что Jimfs находится в памяти. Нужно ли мне очищать пути, которые я создал, или просто удалить метод @After (и связанный с ним механизм)?

Я четко думаю, что это основная потребность в создании jimfs, но хорошо ... Я адаптирую существующий код, и я внезапно запутался в этом.

ответ

2

Поскольку новый экземпляр FooTest создается для каждого тестового метода (не уверен, если это всегда правда с JUnit, но я думаю, что это по крайней мере, правда, в типичном случае), вы будете получать новый FileSystem для каждого теста, если вы не сделаете это поле static. Поэтому удаление файлов, созданных после теста, не требуется. Тем не менее, вы можете сделать это close()FileSystem после каждого теста. Это немедленно удаляет его с карты открытых файловых систем, позволяя собирать мусор. (Это не является абсолютно необходимым, так как файловая система хранится в слабой ссылке там, но я думаю, что это все равно.)

+0

Спасибо за подсказку 'close()', на самом деле приятно знать, что, поскольку Junit держится по умолчанию сильные ссылки тестовых экземпляров для всего прогона. Что касается самого Junit, вы можете сомневаться в одном экземпляре для каждого тестового метода, так как он полностью определен используемым «Runner», хотя по умолчанию используется один экземпляр для каждого теста. –

+0

Да, поэтому вы, вероятно, захотите использовать '@ Before' и' @ After' для создания/закрытия вашей 'FileSystem', чтобы вы делали все правильно для JUnit. В какой-то момент я могу создать JUnit Rule для Jimfs, который сделает это за вас. – ColinD

Смежные вопросы