Commons-vfs копирует файловую систему - PullRequest
3 голосов
/ 02 августа 2011

Я пытаюсь использовать commons-vfs в качестве оболочки файловой системы, чтобы упростить модульное тестирование некоторого кода, который должен касаться файловой системы.Сейчас я просто знакомлюсь с API.Я хотел бы создать виртуальную файловую систему и добавить пару файлов (папку, а затем файл в этой папке в корневой каталог).

Вот тестовый класс, который я написал для testdrive API:

public class CommonsVfsLearningSpikeTest extends Base {
FileSystemManager fsManager;
FileObject rootVFS;

@Before public void createFixture() throws Exception{
    this.fsManager = VFS.getManager();
    this.rootVFS = fsManager.createVirtualFileSystem("rootVfs");
}

@Test public void testCreationOfDefaultFileSystem() throws Exception {
    assertNotNull(fsManager);
}

@Test public void testCreationOfVFS() throws Exception {
    //root file has an empty base name
    assertEquals("", rootVFS.getName().getBaseName());
}

@Test public void testCreationOfChildrenFiles() throws Exception {
    FileObject childFolder = rootVFS.resolveFile("childFolder");
    childFolder.createFolder();
    assertNotNull(childFolder );

    FileObject childFile = rootVFS.resolveFile("childFolder/childFile");
    childFile.createFile();
    assertNotNull(childFile);

}   

}

В настоящее время я получаю следующую ошибку:

[junit] Testcase: testCreationOfChildrenFiles(com.usengineeringsolutions.bridgewatch.vfs.CommonsVfsLearningSpikeTest):      Caused an ERROR
[junit] Incorrect file system URI "file:///" in name "file:///rootVfs/childFolder", was expecting "/rootVfs/".
[junit] org.apache.commons.vfs.FileSystemException: Incorrect file system URI "file:///" in name "file:///rootVfs/childFolder", was expecting "/rootVfs/".
[junit]     at org.apache.commons.vfs.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:274)
[junit]     at org.apache.commons.vfs.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:267)
[junit]     at org.apache.commons.vfs.provider.AbstractFileObject.resolveFile(AbstractFileObject.java:670)
[junit]     at com.usengineeringsolutions.bridgewatch.vfs.CommonsVfsLearningSpikeTest.testCreationOfChildrenFiles(CommonsVfsLearningSpikeTest.java:27)
[junit]
[junit]

1 Ответ

1 голос
/ 12 ноября 2011

Я только начал использовать vfs, и в модульных тестах для компонентов, зависящих от vfs, я использовал подход «файловая система ram: //», а не пытался полностью имитировать интерфейсы VFS.

Это означает, что модульные тесты больше не являются «чистыми», поскольку поведение теста теперь зависит не только от SUT (испытуемого субъекта), но это был компромисс, с которым я был счастлив жить, потому что это помогло заставить его работать. .

...