나는 독점적 인 저장소 형식을 가지고 있으며이 저장소를 처리 할 Python 모듈을 개발하려고합니다. Repo 형식은 다음과 같습니다.os.listdir을 조롱하여 파이썬에서 파일과 디렉토리를 가장하는 방법은 무엇입니까?
/home/X/
|
+ alpha/
|
+ beta/
|
+ project.conf
여기에서 X
은 프로젝트입니다. alpha
및 beta
은이 프로젝트의 폴더이며이 프로젝트에서는 그룹을 나타냅니다. A 그룹은이 레포의 컨테이너이며, 실제로이 질문과 관련이 없습니다. repo X
에도 루트 수준의 파일이 있습니다. project.conf
은 이러한 파일의 예입니다.
X
과 같은 프로젝트를 추상화하는 Project
클래스가 있습니다. Project
클래스에는 메모리 내 표현을 작성하는 load()
메서드가 있습니다. 단위 테스트
class Project(object):
def load(self):
for entry in os.listdir(self.root):
path = os.path.join(self.root, entry)
if os.path.isdir(path):
group = Group(path)
self.groups.append(group)
group.load()
else:
# process files ...
파일 시스템을 조롱함으로써 load()
방법, 내가 가진 :
import unittest
from unittest import mock
import Project
class TestRepo(unittest.TestCase):
def test_load_project(self):
project = Project("X")
with mock.patch('os.listdir') as mocked_listdir:
mocked_listdir.return_value = ['alpha', 'beta', 'project.conf']
project.load()
self.assertEqual(len(project.groups), 2)
이 성공적으로 모의 os.listdir
않습니다. 하지만 파이썬이 파일과 디렉토리로 구성된 mocked_listdir.return_value
을 취급하도록 속일 수는 없습니다.
어떻게 테스트 파일로 alpha
및 beta
디렉토리 등과 project.conf
을 볼 수 있도록, 동일한 테스트에서 하나 os.listdir
또는 os.path.isdir
, 조롱합니까?
을 'os.listdir'에 할 일이 없으면 다른 함수가 그 이름이 실제 파일과 디렉토리라고 생각하게 만들 것입니다. 'os.listdir'은 많은 이름을 뱉어냅니다. – user2357112
나는 @ user2357112가 말한 것에 동의한다. 프로젝트의 디렉토리로 알파와 베타를 갖고 있습니까? 그렇다면'os.path.isdir'을 조롱 할 필요가 없습니다. –
알파와 베타는 프로젝트의 일부가 아닙니다.이 디렉토리는이 프로젝트가 처리하는 저장소의 구조를 설명하는 더미 디렉토리입니다. – Upendra