我们可以在python单元测试用例中模拟测试目录和几个文件吗?
scan.py:
import re
from pathlib import Path
class Scan():
def scan_files(self, dir_path, filter_regex=None):
for item in Path(dir_path).iterdir():
if not item.is_symlink():
if item.is_dir():
for child_item in self.scan_files(item, filter_regex=filter_regex):
yield child_item
else:
if filter_regex is None:
yield item
elif filter_regex:
if re.match(filter_regex, item.name, re.IGNORECASE):
yield item
else:
pass
测试_扫描.py:
import unittest
from mock import patch
from scan import Scan
class TestScan(unittest.TestCase):
def setUp(self) -> None:
"""Unit Test default
"""
pass
def instantiate_scan_class(self):
scan = Scan()
return scan
def test_scan_files(self):
dir_path = "/my/test/path"
# Create the UploadWatchService object
scan = self.instantiate_scan_class()
result = scan.scan_files(dir_path=dir_path)
for item in result:
print(item)
if __name__ == '__main__':
unittest.main()
我在下面跑
python3 -m unittest discover
我收到以下错误:
======================================================================
ERROR: test_scan_files (test_scan.TestScan)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/vcimalap/code/watchservice/src/main/test_scan.py", line 24, in test_scan_files
for item in result:
File "/Users/vcimalap/code/watchservice/src/main/scan.py", line 12, in scan_files
for item in Path(dir_path).iterdir():
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/pathlib.py", line 1160, in iterdir
for name in self._accessor.listdir(self):
FileNotFoundError: [Errno 2] No such file or directory: '/my/test/path'
有人能帮我模拟以下项目吗?这样我就可以实现单元测试或帮助我进行www.example.com的任何示例单元测试scan.py
1. mocking directory path
2. Generating few test files
3. mocking item.is_symlink()
4. mocking item.is_dir()
一种方法是我们可以使用path.object,我想这是为了方法调用输出来设置的。
1条答案
按热度按时间kx1ctssn1#
创建测试目录和空文件
只需使用
tempfile
(来自标准库)。因为这些都是文件操作,所以我不建议你模仿,而是使用
tempfile
创建临时目录(和文件),在系统重启时(或者根据相应的系统策略)刷新。与
tempfile.TemporaryDirectory
类似,还有一个tempfile.NamedTemporaryFile
。使用
Faker
创建包含虚假内容的测试文件要为测试文件生成虚假内容,可以使用Faker。
安装
Faker
使用情况查看faker docs了解更多信息。
使用
faker-file
创建包含虚假内容的测试文件您还可以使用faker-file,它允许您对生成的内容进行更多的控制,支持更多的文件类型(DOCX、PDF等),与ORM(
Django
、SQLAlchemy
)和factory_boy完美集成,甚至支持远程存储(如AWS S3、Azure云存储和Google云存储)。安装
faker-file
使用情况查看faker-file docs了解更多信息。