首页 > 解决方案 > 另一个文件中的函数不会被嘲笑

问题描述

我在一个名为 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"它没有接受嘲笑的价值。我不明白为什么要这样做,因为我觉得我已经遵循了文档。希望能得到一些帮助,说明为什么它没有被嘲笑。

标签: pythondjangounit-testingmockingpython-unittest

解决方案


您的代码中有一些拼写错误:您忘记了@补丁装饰器的 ,补丁名称错误,并且您将函数结果而不是函数传递给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)

推荐阅读