【问题标题】:Mocking a function using unittest使用 unittest 模拟函数
【发布时间】:2014-11-12 08:32:38
【问题描述】:

我正在尝试对调用另一个函数“test()”的函数“check()”进行单元测试。

我想模拟 test() 并调用一个函数 mocked() 来代替它。

这是我的代码:

import unittest
import mock

def check():
    return test()
def test():
    return "test"

def mocked():
    return "mocked"

class CheckTest(unittest.TestCase):
    @mock.patch(target='test.test', spec=True, new_callable=mocked)
    def test_test(self, mocked):
        self.assertEqual(check(), "mocked")




if __name__ == '__main__':
    unittest.main()

我只想用我的字符串替换 test() 返回的字符串。而且我不能覆盖或更改 test() 或 check() 函数。

【问题讨论】:

    标签: python unit-testing mocking python-unittest


    【解决方案1】:

    有点简单:设置return_value即可:

    import unittest
    import mock
    
    def check():
        return test()
    def test():
        return "test"
    
    class CheckTest(unittest.TestCase):
        @mock.patch('__main__.test')
        def test_test(self, mocked):
            mocked.return_value = "mocked"
            self.assertEqual(check(), "mocked")
    
    
    if __name__ == '__main__':
        unittest.main()
    

    mockedtest 函数的模拟版本。

    【讨论】:

    • @user3688148 如果你从控制台使用它,你必须使用__main__而不是名称模块。
    • @user3688148 如果您认为它有用,您也应该单击向上箭头,而不仅仅是接受它:)
    • 我是新来的,所以我不能投票给你(至少需要 15 分)。
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多