为了测试,您可以使用mock
模块(在较新的Python 3中是标准的,在旧版本中可从pypi下载)来创建“虚假”类。有一篇关于mock库的很棒的文章,它解释了如何做到这一点,我会在这里提供链接,这对我帮助很大。您将希望您的test.py文件看起来像下面的代码。
from pqr import pq
import mock
class TestLm(unittest.Testcase):
@mock.patch(pq.LM)
def test_lm(self, mock_lm):
my_ab = pq.AB()
my_ab.echo()
使用
mock
模块,您可以创建一个模拟版本的模块/类,用于测试方法,只需在测试方法上方使用装饰器 "patch" 即可。这将使用 MagicMock 对象替换指定模块/类的原始版本,然后将其作为第二个参数传递到测试方法中。这个 MagicMock 不会实际执行
Lm
的任何功能,但允许您对其应该工作的方式进行断言。如果需要,您可以稍后覆盖功能。然而,有个小问题需要注意,在我提供的指南中有详细说明。您需要确保从使用它的模块中导入
Lm
,而不是以传统方式导入。对于导入,Python 创建特定于导入模块的模块对象,因此您需要模拟来自
pq
模块的特定
Lm
对象才能测试其功能。这个库一开始使用可能有点复杂,并包含比单个 StackOverflow 答案涵盖的更多信息,所以我建议您进行一些阅读。
关于 mock
模块的文档可以在这里找到。
Python 2.7 版本的下载可在这里找到。
我对 mock
库也是刚接触,所以如果我有错误,请随意纠正!
编辑:看到 Martijn 的回答后,我意识到我忘记在 my_ab 构造函数中加括号了!
pqr.pq.Lm = your_mockup
,然后Ab
将使用your_mockup
而不是原始的Lm
。(这回答了您的问题,但这可能不是最好的测试模式。考虑修改Ab
的构造函数以允许传递替代Lm
实现作为替代方案。) - Phillip