首页 > 解决方案 > 补丁方法在导入时不起作用

问题描述

我正在尝试模拟模块 dog.py 文件的开头。补丁方法似乎在导入时不起作用,但在以后的调用中起作用。

测试.py

import unittest
from unittest.mock import patch

class TestMethods(unittest.TestCase):
    @patch('dog.Cat')
    def test_1(self, cat_mock):
        from dog import Dog
        dog = Dog("a dog")

狗.py

from cat import Cat

cat = Cat('kitty')
class Dog:

    def __init__(self, name):
        self.name = name

猫.py

class Cat:

    def __init__(self, name):
         pass

当调用“from dog import Dog”时,Cat 不是模拟类而是真正的类。但是,当调用“dog = Dog("a dog")”时,Cat 就是模拟对象。

为什么导入模块时 Cat 不是 mock?

标签: pythonmockingpython-unittestpython-unittest.mock

解决方案


推荐阅读