设置函数的返回值

2024-10-01 13:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一门课:

class AccountBusiness:
    def save(self, account) -> Account:
        if not account.account_number_is_valid():
            return False

        return True

测试如下:

^{pr2}$

但它显示了一个例外,比如:

AssertionError: <MagicMock name='save()()' id='48830448'> != True

我想将account.account_number_is_valid()的返回值设置为False,并运行测试。在


Tags: selffalsetruenumberreturnifissave
1条回答
网友
1楼 · 发布于 2024-10-01 13:26:16

您正在对要测试的实例方法使用patch对象。但是,您希望测试save方法中的逻辑。因此,模拟出来并不能测试该方法内部的任何逻辑。因此,您实际得到的输出是:

AssertionError: <MagicMock name='save()()' id='48830448'> != True

应该是第一个暗示事情不对的地方。您的save方法将作为MagicMock返回。你不想这样。您实际想要做的只是模拟Account类,然后从那里开始相应的操作。所以,你在这里打补丁:

^{pr2}$

实际上应该是:

@mock.patch('path.to.AccountBusiness.Account', return_value=Mock(), autospec=True)

path.to.AccountBusiness.AccountAccount类相对于AccountBusiness类的位置。在

所以,有了这个补丁,那么调用Accountreturn_value将成为您的模拟对象,您可以将它用于您的account_number_is_valid。所以,代码实际上是这样的:

class MyTest(unittest.TestCase):
    def setUp(self):
        self.account_business = AccountBusiness()

    @mock.patch('path.to.AccountBusiness.Account', return_value=Mock(), autospec=True)
    def test_can_save_valid_account(self, mock_account):
        mock_account_obj = mock_account.return_value
        mock_account_obj.account_number_is_valid.return_value = False

        self.assertFalse(self.account_business.save(mock_account_obj))

另外,要密切注意最后的断言。它被更改为使用可用的assertFalse。另外,检查一下您自己的逻辑,因为为account_number_is_valid返回False实际上将在您的save方法中返回{}。在

相关问题 更多 >