模拟内部方法Python2

问题描述 投票:0回答:1

我是新来的嘲笑者,真正为之挣扎。大多数情况下,在文档和大多数SO页面中,它都显示了如何获取模拟result_value,但是我想检查从方法中获取的值是否正确,而不是result_value。这是示例:

#!/usr/bin/env python

class Example:

    def one(self):
        return 1

    def two(self, one):
        print(one + 1) # basically any void method, ex: result = one + 1 and check result value if correct

    def main(self):
        self.two(self.one())

if __name__ == '__main__':
    e = Example()
    e.main()

测试:

#!/usr/bin/env python

import unittest
import example
from mock import patch

class Example(unittest.TestCase):

    def test_one(self):
        self.assertEqual(1, et.one())

    def test_two(self):
        with patch('example.Example.two'):
            self.assertEqual(2, et.two(et.one())) # ..the part I'm stuck
                                                  # whick ofc throws AssertionError: 2 != <MagicMock name='two()' id='blablabla'>

    def test_main(self):
        # unknown part..

if __name__ == '__main__':
    et = example.Example()
    unittest.main()

如何通过unittest实现void方法检查?

python mocking python-2.6
1个回答
0
投票

[您无需嘲笑任何东西(无论如何直接);您想要捕获标准输出并验证它是否符合您的期望。

from contextlib import redirect_stdout
from io import StringIO

def test_two(self):
    stdout = StringIO()

    with redirect_stdout(stdout):
        et.two(et.one())

    self.assertEqual(stdout.getvalue(), "2\n")

或者,您可以模拟print并使用期望的参数检查它是否为[[被调用。

def test_two(self): with patch('__builtin__.print') as p: et.two(et.one()) p.assert_called_with(2)
© www.soinside.com 2019 - 2024. All rights reserved.