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)
我在模拟和测试我的 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)