我是单元测试的新手。我过去使用过模拟、修补,但我的情况对我来说创建单元测试有点复杂。
所以我有一个文件:parent.py具有以下数据类
import multiprocessing
from dataclasses import dataclass
@dataclass
class ParentClass:
cpu_count: int = multiprocessing.cpu_count()
我有另一个child.py具有以下数据类的模块
from stackoverflow.parent import ParentClass
from dataclasses import dataclass
@dataclass
class ChildClass(ParentClass):
some_attribute_1: int = 1
some_attribute_2: int = 2
....
最后,我有第三个actual_function.py使用这些数据类的模块。
from stack_overflow.child import ChildClass
def get_cpu_count_and_attributes(cc: ChildClass):
return cc.cpu_count, cc.some_attribute_1
在这里,我想对print_cpu_count_and_attributes功能进行单元测试。这里的补丁是如何工作的?我创建了以下测试用例,但它失败了。我系统中的 cpu_count 是 16,但我想用返回值 8 来模拟它,以便它可以在具有不同核心数量的其他机器上工作
from unittest import mock
from stack_overflow.actual_function import *
from stack_overflow.child import ChildClass
@mock.patch('stack_overflow.parent.multiprocessing.cpu_count', return_value=8)
def test_print_cpu_count_and_attributes():
cc = ChildClass()
assert get_cpu_count_and_attributes(cc) == (8, 1)
这是文件夹结构。
stackoverflow
├── __init__.py
├── actual_function.py
├── child.py
├── parent.py
└── test_function.py
慕神8447489
相关分类