繁体   English   中英

Python3 -unittest mocking - isinstance 问题

[英]Python3 -unittest mocking - problem with isinstance

我在 mocking 和测试我的函数/类时遇到了一些问题。

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

模块.py:

import some_module

class MyClassToTest:
    def __init__():
        pass

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

我想测试我的 module.py:

测试模块.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”——其他一些测试需要它。

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

你知道如何处理它吗?

您的方法是正确的,您只是忘记设置 object 规格。 这是一个基于您的问题的功能齐全的示例。

一些模块.py

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

模块.py

import some_module


class MyClass:
    def __init__(self):
        pass

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

测试模块.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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM