Java 용 Fake File System 프레임 워크가 있습니까? [닫은]
IO 작업 (이 경우 파일 시스템)을 많이 사용하는 프로젝트에 테스트를 도입하고 있습니다. 시스템은 지속적으로 파일을 열고 / 닫고, 파일이 있는지 확인하고, 삭제합니다.
내 테스트를 설정하고 추론하기가 어렵 기 때문에 규칙적인 조롱이별로 유용하지 않다는 것이 곧 분명해졌습니다. 반면에 가짜 파일 시스템을 사용하는 것은 굉장 할 것이고 설정하기 매우 쉽다고 생각합니다.
루비 사람들이 다시 한 것 같고 루비에서 정확히 내가 요구하는 것이 있습니다 : http://ozmm.org/posts/fakefs.html .
Java와 원격으로 유사한 것이 있습니까?
Google은 Java 7의 FileSystemProvider에 대한 오픈 소스 인 메모리 구현을 가지고 있습니다. 이 프로젝트는 jimfs라고합니다 .
Java 6 또는 이전 버전을 사용하는 경우 대안이 있습니다. 이전에 Apache Commons VFS 를 사용하여 큰 성공을 거두었습니다. 언급 된 다른 응답자가 Java 7에있는 사용자 정의 FileSystemProvider와 매우 유사한 것 같습니다.
파일, RAM, S / FTP 및 Jar와 같은 여러 파일 시스템 구현 이 미리로드 되어 있습니다. 나는 또한 S3 용 플러그인을 보았다 .
같은 클래스 때문에 자바 6 및 이전 버전가 어렵다 File
및 FileInputStream
자바 공간에서 서로 다른 "가상 파일 시스템"을 파견 할 수있는 방법을 제공합니다.
Java 7에는 가상 파일 시스템에 대한 지원이 있습니다. 사용자 정의 파일 시스템 공급자 개발을 참조하십시오 . 이것이 당신이하고 싶은 일을 할 수 있는지는 모르겠지만, 찾아보기 시작하기에 좋은 곳입니다.
Meh. 실제로 가짜 파일 시스템이없는 것 같기 때문에 최소한의 구현을 혼자서 구현할 것입니다. FileSystemProvider를 사용하여 아무것도 얻지 못했습니다.
실제로 FileSystemProvider를 사용하면 이길 수 있습니다.
(오픈 소스 라이선스로 출시 된 경우) 귀하의 위치에있는 다른 사람들과 다른 목적을 위해 매우 유용 할 수있는 무언가를 구현합니다.
다른 사람이 지금 작업 중일 수있는 FileSystemProvider로 전환하기로 결정하면 자신을 위해 더 쉽게 만들 수 있습니다.
JUnit 패키지 org.junit.rules.TemporaryFolder
에서 사용할 수 있습니다 .
TemporaryFolder 규칙을 사용하면 테스트 방법이 완료 될 때 삭제되도록 보장되는 파일 및 폴더를 만들 수 있습니다 (통과 여부에 관계없이).
예:
final TemporaryFolder testFolder = new TemporaryFolder();
testFolder.create();
final Path filePath = testFolder.newFile("input.txt").toPath();
final Path dirPath = testFolder.newFolder("subfolder").toPath();
또는 .toPath()
부품을 종료합니다 .
final File filePath = testFolder.newFile("input.txt");
당신은 추상의 사용을 할 수 File
귀하의 API를 변경하여 "쓰기 데이터에 어딘가에 '의 의도를 사용하여는 사용하는 OutputStream
대신의를 File
다음의 API a를 통과 FileOutputStream
하여 생산 코드에서,하지만 그것을 통과 ByteArrayOutputStream
하여 테스트에서. A ByteArrayOutputStream
는 메모리 내 스트림이므로 매우 빠르며 메서드를 사용하여 콘텐츠를 간단히 검사 할 수 있습니다. 테스트에 적합합니다. 데이터 ByteArrayInputStream
를 읽고 싶다면 해당하는 것도 있습니다 .
파일 시스템은 일반적으로 매우 빠릅니다. 테스트에서 많은 파일 I / O를 수행하지 않는 한 신경 쓰지 않습니다.
Java File
객체 를 생성 해도 디스크에 파일이 생성 되지는 않습니다 . 즉, 다음 코드는 디스크를 변경하지 않습니다.
File f = new File("somepath"); // doesn't create a file on disk
Google의 Jimfs 는 메모리 내 NIO 파일 시스템으로 테스트에 적합합니다.
간단한 방법은 전적으로 RAM ( Linux의 tempfs , Windows 의 RAM 디스크) 에 기반한 파일 시스템을 제공하는 시스템의 방법을 사용하는 것입니다 .
MockFTPServer 에는 몇 가지 가짜 파일 시스템 구현이있는 것으로 보입니다 (Unix / Windows).
이러한 가짜 파일 시스템 구현을 FTP 개념과는 별도로 사용할 수있는 것 같습니다. 나는 당신이 설명했던 것과 똑같은 목적을 위해 지금 이것을 시도하고 있습니다.
특정 프레임 워크에 대해서는 잘 모르겠지만 OOP 측면에서 일반적인 접근 방식은 파일 액세스 코드 (인터페이스가 풍부합니다!) 위에 추상화 된 레이어를 작성하고 일반적인 작업을 쉽게 사용할 수있는 파사드를 작성하는 것입니다. 그런 다음 현재 테스트중인 코드 아래의 한 레이어를 조롱 한 다음 본질적으로 가짜 파일 시스템입니다 (또는 테스트중인 코드는 그렇지 않으면 알 수 없습니다).
이를 처리하기 위해 종속성 주입 프레임 워크를 사용하는 경우 인터페이스의 가짜 구현을 위해 구성 요소를 쉽게 전환 할 수 있습니다. 제어 반전의 패턴을 따르고 테스트중인 클래스의 생성자에 종속성을 전달하면 테스트를 쉽게 수행 할 수 있습니다.
public interface IFileSystem {
IFileHandle Load(string path);
//etc
}
public class ClassBeingTested {
public ClassBeingTested(IFileSystem fileSystem) {
//assign to private field
}
public void DoSomethingWithFileSystem() {
//utilise interface to file system here
//which you could easily mock for testing purposes
//by passing a fake implementation to the constructor
}
}
나는 내 자바가 정확하기를 바랍니다. 나는 오랫동안 자바를 작성하지 않았지만, 당신은 드리프트를 얻을 것입니다. 바라건대 나는 여기서 문제를 과소 평가하지 않고 지나치게 단순합니다!
물론 이것은 당신이 진정한 단위 테스트, 즉 전체 시스템이 아닌 가능한 가장 작은 코드 단위를 테스트한다는 것을 가정하고 있습니다. 통합 테스트를 위해서는 다른 접근 방식이 필요합니다.
Arquillian 프로젝트의 ShrinkWrap 은 메모리 파일 시스템에 NIO 규격을 포함하는 것으로 보입니다.
You can create a simple in memory FileSystem by doing the following:
FileSystem fs = ShrinkWrapFileSystems.newFileSystem(ShrinkWrap.create(GenericArchive.class))
Two other in memory file systems for java are,
Both implement the NIO.2 File system api.
I was googling "Fake java FileSystem" and found this question. Unfortunately this is all I found. So I wrote this fake FileSystem myself: https://github.com/dernasherbrezon/mockfs
I'm using it for simulating IOExceptions during read/write to files. IOException could happen for example due to "no disk space", which is nearly impossible to simulate by other means.
Its a bit old and this solution seems to be linux only but it looks good https://www.google.co.il/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=tmpfs%20on%20ubuntu
tmpfs is an in-memory mapped directory (data disappears on reboot). Once mounted, Data can be copied into it and be worked on from memory.
참고URL : https://stackoverflow.com/questions/6970192/are-there-any-fake-file-system-frameworks-for-java
'Program Tip' 카테고리의 다른 글
Emacs : 시작시 마지막 세션에서 버퍼를 다시여시겠습니까? (0) | 2020.10.05 |
---|---|
임의의 스칼라 코드 위치 동안 인터프리터에 드롭 (0) | 2020.10.05 |
진행률 표시 줄의 숫자는 Spark-shell에서 무엇을 의미합니까? (0) | 2020.10.05 |
코드를 작성하기 전에 애플리케이션의 아키텍처를 어떻게 계획합니까? (0) | 2020.10.05 |
Python에서 UDP 멀티 캐스트는 어떻게합니까? (0) | 2020.10.05 |