【问题标题】:Mock a private function of a class which uses member variables in unittest python模拟在unittest python中使用成员变量的类的私有函数
【发布时间】:2018-08-02 16:59:20
【问题描述】:

例如,我有一个简单的类

class Child:
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def __check(self):
        if self.age >10:
            "insert into db both age and name"
        else:
            print(self.age)

    def call(self,flag):
        if flag:
            self.__check()

现在我如何在 python 中使用模拟测试__check(private function)

【问题讨论】:

  • 你不会模拟你想要测试的东西。如果你这样做,你就无法测试它!

标签: python python-2.7 unit-testing mocking python-unittest


【解决方案1】:

尝试:

my_child = Child("John", 9)
my_child.call(True)

如果你想在 __check() 中尝试第一种情况,请将年龄更改为 10 岁以上。

【讨论】:

  • 我需要使用模拟而不是实际的实例化
【解决方案2】:

模拟sys.stdout 以断言打印

from StringIO import StringIO

def test_check(self):
    ch = Child('bob', 2)
    self.assertEqual(ch._Child__check(), None)
    with mock.patch('sys.stdout', new_callable=StringIO) as mock_out:
        ch = Child('bob', 2)
        self.assertEqual(ch._Child__check(), None)
        self.assertEqual(mock_out.getvalue(), '2\n')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多