2013-09-27 5 views
2

특히 PyTables 및 HDF5와 관련된 파일 IO를 사용하여 단위 테스트를 수행하는 적절한 방법은 무엇입니까?PyTables 및 HDF5를 사용하여 Python 단위 테스트

내 응용 프로그램은 hdf5 파일과 파이썬 데이터의 저장 및 검색을 진화시키고 있습니다. 지금까지 단순히 hdf5 파일을 직접 단위 테스트에 작성하고 비교를 위해로드했습니다. 문제는 필자가 하드 디스크에 파일을 실제로 쓸 수있는 권한이있는 다른 사람이 테스트를 실행할 때 나는 물론 확신 할 수 없다는 것입니다. (젠킨스 (Jenkins)와 같은 자동화 된 테스트 프레임 워크를 사용하기를 원할 때 더 나 빠졌지 만, 아직 확인하지는 못했다.

이러한 상황을 처리하기위한 적절한 방법은 무엇입니까? 쓰기 권한이 부여 될 가능성이 높은 특정 위치에/tmp/폴더를 만드는 것이 가장 좋습니다. 그렇다면, 그것은 어디에 있습니까? 또는 PyTables의 쓰기 및 읽기를 모의하기위한 쉽고 직선적 인 방법이 있습니까?

고맙습니다.

답변

1

"tempfile"모듈을 사용하여 파일을 만드는 방법은 어떻습니까?

http://docs.python.org/2/library/tempfile.html

이 모든 플랫폼에서 작동하도록 보장하지만 난 그게 가장 일반적인 작업을 수행 내기 경우 모르겠어요. 확실히 "/ tmp"를 대상으로 하드 코딩하는 것보다 더 나은 방법입니다.

또 다른 방법은 파일 I/O가 필요하지 않도록 메모리에 HDF5 데이터베이스를 만드는 것입니다.

http://pytables.github.io/cookbook/inmemory_hdf5_files.html

내가 "메모리 HDF5를"인터넷 검색하여 해당 링크를 얻을 그래서 나는 얼마나 잘 작동하는지 확실히 말할 수 없습니다.

메모리 내 데이터베이스와 임시 파일 데이터베이스 모두에 대해 실행되도록 모든 테스트 사례를 작성하는 것이 가장 좋습니다. 이렇게하면 위의 기술 중 하나가 사용자에게 적합하지 않더라도 나머지 테스트는 계속 실행됩니다. 또한 버그가 파일 쓰기와 관련이 있는지 데이터베이스 내부의 버그인지 여부를 개별적으로 확인할 수 있습니다.

+0

pytables/hdf5가 자체 파일 핸들을 생성하고 사용자가 제공하는 파일 핸들을 사용할 수 없으므로 tempfile을 실제로 사용할 수 없습니다. –

1

기본적으로 HDF5 및 Pytables는 I/O 라이브러리입니다. 파일 시스템 조작을위한 API를 제공합니다. 따라서 실제로 PyTables/HDF5를 테스트하려면 파일 시스템을 사용해야합니다. 이 문제를 해결할 방법이 없습니다. 사용자가 시스템에 대한 쓰기 권한이 없으면 테스트를 실행할 수 없습니다. 또는 적어도 현실적인 테스트를 실행할 수는 없습니다.

메모리 파일 드라이버를 사용하여 테스트를 수행 할 수 있습니다. 이것은 대부분의 테스트 속도를 높이고 더 높은 수준의 기능을 테스트 할 때 유용합니다. 그러나이 경로를 선택하더라도 실제 파일을 실제로 작성하는 몇 가지 테스트가 있어야합니다. 이것이 실패하면 뭔가 잘못되었다는 것을 알게됩니다.

일반적으로 사람들은 임시 h5 파일을 tests 디렉토리에 만듭니다. 그러나이 dir에 대한 쓰기 액세스 권한이없는 사용자가 정말로 걱정된다면 tempfile.gettempdir()을 사용하여 환경의 올바른/tmp 디렉토리를 찾아야합니다. 이것은 크로스 플랫폼이므로 어디에나 작동해야합니다. 거기서 생성 한 h5 파일을 저장하고 나중에 삭제하는 것을 잊지 마십시오!