Python中实例变量的模拟方法

时间:2017-06-08 17:50:55

标签: python unit-testing mocking

我试图弄清楚如何正确模拟一个实例变量,该变量是另一个具有父类使用的方法的类的实例。

以下是问题域的简化示例:

// Defensive database opening logic.

if (_databaseConnection.State == ConnectionState.Broken) {
    _databaseConnection.Close();
}

if (_databaseConnection.State == ConnectionState.Closed) {
    _databaseConnection.Open();
}

由此产生的测试提出:

genotype,group,gene
5g/5g,1,PAI
5g/5g,1,PAI
4g/5g,1,PAI
4g/5g,1,PAI
4g/5g,1,PAI
4g/5g,1,PAI
5g/5g,1,PAI
4g/4g,1,PAI
4g/4g,1,PAI
4g/4g,2,PAI
4g/5g,2,PAI
4g/4g,2,PAI
4g/4g,2,PAI
4g/4g,2,PAI
4g/5g,2,PAI
5g/5g,2,PAI
4g/4g,2,PAI
5g/5g,2,PAI
5g/5g,2,PAI
5g/5g,2,PAI
4g/5g,2,PAI

如何正确模拟import unittest import mock class Client: def action(self): return True class Service: def __init__(self): self.client = Client() class Handler: def __init__(self): self._service = Service() def example(self): return self._service.client.action() class TestHandler(unittest.TestCase): @mock.patch('__main__.Handler._service') def test_example_client_action_false(self): """Test Example When Action is False""" handler = Handler() self.assertFalse(handler.example()) if __name__ == '__main__': unittest.main() AttributeError: __main__.Handler does not have the attribute '_service' ,以便Service为我的测试用例返回Client

1 个答案:

答案 0 :(得分:0)

可以通过模拟动作返回值

来完成
class TestHandler(unittest.TestCase):

@mock.patch('__main__.Client.action')
def test_example_client_action_false(self, mock_client_action):
    """Test Example When Action is False"""
    mock_client_action.return_value = False
    handler = Handler()
    self.assertFalse(handler.example())