Python3 -unittest 模拟 - isinstance 的问题

Python3 -unittest mocking - problem with isinstance

我在模拟和测试我的 function/class 时遇到了一些问题。

我认为解释它的最简单方法是显示一些代码:

module.py:

import some_module

class MyClassToTest:
    def __init__():
        pass

    def f(self, a):
        if isinstance(a, some_module.someClass):
            print("true")

我想测试我的 module.py:

test_module.py:

import sys
from unittest import mock

sys.modules['some_module'] = mock.MagicMock() # mocking whole module

def test_my_test():
    to_test = MyClassToTest()
    to_test.f(5)

当然这里我会报错:

TypeError: isinstance() arg 2 must be a type or tuple of types

因为some_module被嘲笑了。

我真的需要模拟“some_module”——其他一些测试需要它。

是的,我可能应该取消模拟模块只是为了一些测试,或者当我在特定功能中使用它时模拟 isinstance?

你知道怎么处理吗?

你是对的,你只是忘了设置对象规范。这是一个基于您的问题的功能齐全的示例。

some_module.py

class SomeModule(object):
    def method(self):
        return True

module.py

import some_module


class MyClass:
    def __init__(self):
        pass

    def f(self, a):
        if isinstance(a, some_module.SomeModule):
            return True
        return False

test_module.py

from unittest import mock
from unittest import main, TestCase

import function

class MyClassTestCase(TestCase):

    def test_myclass(self):
        m = mock.MagicMock(spec=function.some_module.SomeModule)
        mc = function.MyClass()
        self.assertEqual(mc.f(1), False)