Python3-单元测试嘲笑-问题是不稳定的



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

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

module.py:

import some_module
class MyClassToTest:
def __init__():
pass
def f(self, a):
if isinstance(a, some_module.someClass):
print("true")

我想测试我的模块.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"-其他一些测试需要它。

是的,我可能应该只是为了一些测试而卸载模块,或者当我在特定功能中使用它时,可能会嘲笑这种情况?

你知道如何处理它吗?

您的做法是正确的,只是忘记了设置对象规范。以下是基于您的问题的一个功能齐全的示例。

some_module.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)

最新更新