模拟在单元测试python中使用成员变量的类的私有函数

时间:2018-08-02 16:59:20

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

例如,我有一个简单的课程

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)

2 个答案:

答案 0 :(得分:0)

尝试:

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

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

答案 1 :(得分:0)

模拟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')