在Python中测试方法时如何模拟对象属性

时间:2018-06-10 18:23:09

标签: python unit-testing mocking python-unittest

我正在努力模拟一个类中的属性。

我正在尝试模拟此portfolio属性,该属性是我的另一个类的实例。

class Menu:
   def __init__(self):
       self.portfolio = DebtPortfolio()

具体如何在此方法中引用它。

def add_account(self):
    """
    Description: Choice 1 of the main menu, asks user for input to add a
    new account
    :result: adds the account to the portfolio and returns to main menu
    """
    account = DebtAccount(InputManager.get_valid_name_new(self.portfolio),
                          InputManager.get_valid_balance(),
                          InputManager.get_valid_interest())
    self.portfolio.accounts.append(account)
    print("\nAccount added successfully.\n")
    self.main_navigation()

我需要测试使用该组合对象的此Menu类的几种方法。我已经能够修补方法调用,但我无法弄清楚如何修补该属性。

这是我最近的失败尝试。我试图让它将新帐户添加到我的模拟对象作品集。

def setUp(self):
    self.folio = DebtPortfolio()
    self.folio.accounts = [DebtAccount("t1", 12000, 5),
                           DebtAccount("t2", 3000, 20),
                           DebtAccount("t3", 6000, 10)]
    self.menu = Menu()

@patch('src.main.InputManager.InputManager.get_valid_name_new')
@patch('src.main.InputManager.InputManager.get_valid_balance')
@patch('src.main.InputManager.InputManager.get_valid_interest')
def test_add_account(self, mock_name, mock_bal, mock_intrst):

    with patch('src.main.Menu.Menu') as mock_menu:
        mock_name.return_value = "t4"
        mock_bal.return_value = 1000
        mock_intrst.return_value = 15
        mock_menu.portfolio = self.folio
        account = self.menu.add_account()
        self.assertTrue(account in mock_menu.portfolio.accounts)

0 个答案:

没有答案