单元测试 mock 父子类属性相同如何
时间: 2024-02-21 11:07:45 浏览: 210
有效使用Mock编写java单元测试
5星 · 资源好评率100%
在进行单元测试时,如果要 mock 父子类中的同名属性,可以使用 `super()` 函数来区分它们。具体来说,可以先 mock 父类的属性,然后再 mock 子类的属性,这样就能够在测试中使用不同的值来覆盖父子类中的同名属性。
举个例子,假设有以下的父类和子类:
```python
class Parent:
def __init__(self):
self.name = 'Parent'
class Child(Parent):
def __init__(self):
super().__init__()
self.name = 'Child'
```
那么在单元测试中,可以这样 mock 父子类的属性:
```python
import unittest
from unittest.mock import patch
from my_module import Child
class TestChild(unittest.TestCase):
@patch('my_module.Parent.name', 'ParentMock')
@patch('my_module.Child.name', 'ChildMock')
def test_child_name(self):
child = Child()
self.assertEqual(child.name, 'ChildMock')
self.assertEqual(super(Child, child).name, 'ParentMock')
if __name__ == '__main__':
unittest.main()
```
在上面的测试函数中,我们使用 `@patch` 装饰器来分别 mock 父类和子类的属性。然后在测试中,我们通过 `super()` 函数来访问父类的属性,使用 `child.name` 访问子类的属性,这样就能够测试父子类属性的覆盖情况了。
阅读全文