Tôi có một định dạng kho lưu trữ độc quyền và tôi đang cố gắng phát triển một mô-đun Python để xử lý các kho lưu trữ này. Định dạng repo đi như sau:Làm thế nào để giả lập os.listdir để giả vờ các tập tin và thư mục bằng Python?
/home/X/
|
+ alpha/
|
+ beta/
|
+ project.conf
Ở đây, X
là một dự án. alpha
và beta
là các thư mục bên trong dự án này và chúng đại diện cho nhóm trong dự án này. Một nhóm là một vùng chứa trong repo này và những gì nó đại diện thực sự không liên quan cho câu hỏi này. Repo X
cũng có các tệp ở cấp cơ sở của nó; project.conf
là một ví dụ về tệp như vậy.
Tôi có một lớp được gọi là Project
tóm tắt các dự án như X
. Lớp Project
có phương thức load()
để xây dựng biểu diễn trong bộ nhớ.
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 ...
Để kiểm tra đơn vị sự load()
phương pháp chế giễu hệ thống tập tin, tôi có:
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)
này làm giả os.listdir
thành công. Nhưng tôi không thể lừa Python để xử lý mocked_listdir.return_value
như bao gồm các tập tin và thư mục.
Làm thế nào để chế nhạo hoặc os.listdir
hoặc os.path.isdir
, trong cùng thử nghiệm, như vậy mà các bài kiểm tra sẽ thấy alpha
và beta
như danh bạ và project.conf
như một tập tin?
Không có gì bạn làm với 'os.listdir' sẽ làm cho các chức năng khác nghĩ rằng những tên đó là các tập tin và thư mục thực. 'os.listdir' chỉ nhổ ra một loạt tên. – user2357112
Tôi đồng ý với những gì @ user2357112 nói. Bạn có alpha & beta làm thư mục trong dự án không? Nếu vậy bạn thực sự không cần phải giả lập 'os.path.isdir'. –
alpha và beta không phải là một phần của dự án.Chúng là những thư mục giả để giải thích cấu trúc của kho lưu trữ được xử lý bởi dự án này. – Upendra