python - 另一个文件中的函数不会被嘲笑
问题描述
我在一个名为 local.py 的文件中有这个类:
def get_credentials(creds):
data = creds
return data
class ClassA:
def __init__(self):
body = "not a json"
self.credentials = get_credentials(body)
def run(self):
print(self.credentials)
def main():
inst = ClassA()
inst.run()
if __name__ == "__main__":
main()
它所做的只是返回传递给它的凭据。
我想模拟get_credentials
我有另一个文件 test_local.py 的函数:
from local import ClassA
import unittest
from unittest.mock import patch
def mock_get_credentials(creds):
return "123"
class NameTestCase(unittest.TestCase):
patch('local.get_credessntials', new=mock_get_credentials("test"))
def test_whatever(self):
print("true")
inst = ClassA()
inst.run()
self.assertEqual(1, 1)
if __name__ == '__main__':
unittest.main()
我不断得到的输出是这样的:
true
not a json
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
它向我吐出的事实表明"not a json"
它没有接受嘲笑的价值。我不明白为什么要这样做,因为我觉得我已经遵循了文档。希望能得到一些帮助,说明为什么它没有被嘲笑。
解决方案
您的代码中有一些拼写错误:您忘记了@
补丁装饰器的 ,补丁名称错误,并且您将函数结果而不是函数传递给new
. 这是固定测试的相关部分:
class NameTestCase(unittest.TestCase):
@patch('local.get_credentials', new=mock_get_credentials)
def test_whatever(self):
inst = ClassA()
inst.run()
self.assertEqual(1, 1)
推荐阅读
- javascript - 同时按日期和时间对数组进行排序?
- jenkins - 如何在邮递员集合中传递动态路由
- sql - 在没有 ROW_NUMBER 的多列中选择具有最小值的行
- sparql - 没有根据我在 sparql 中的列属性获取我的列值
- python - Django Rest Framework - 在自动生成的文档中列出所有 API
- reactjs - 在商店中保存用户会损害我的应用程序的安全性?
- jquery - 2个基于滚动方向的不同动画
- ajax - Ajax 每次都不能正确更新
- google-analytics - 搜索控制台显示我的网站信息,但谷歌分析不显示。我应该怎么办?
- rust - 返回对现有向量元素或新插入元素的引用