如何在Django测试中使用AssertRaiseMessage()

2024-10-01 15:35:37 发布

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

我按照Django doc使用assertRaiseMessage()编写测试,但问题是在执行测试时会引发异常(因此,测试不会执行)。 请注意,调用的异常是我在模型的方法中自愿引发的异常(不在视图中)。在

class MyTestCase(TestCase):
    def test_invertRewardState_view_fails_notmy_reward(self):
        self.client.login(email='gislaine@toto.com', password='azerty')
        resp = self.client.get(reverse(invertRewardState, args=(1,)))
        self.assertRaisesMessage(
            expected_exception=Exception,
            expected_message=EXC_NOT_YOURS,
            callable_obj=resp)

如何使用AssertRaiseMessage()在不引发异常的情况下执行测试? 谢谢。在

编辑: 在尝试了falsetru第一个解决方案后,问题仍然是相同的。一旦我的测试进入resp = ...部分,就会调用view,然后调用相关的model方法并引发异常。 完整堆栈跟踪:

^{pr2}$

Tags: django方法模型selfclientview视图doc
2条回答

如果使用self.client.get,则不会直接获得异常,但可以检查状态代码。在

def test_invertRewardState_view_fails_notmy_reward(self):
    self.client.login(email='gislaine@toto.com', password='azerty')
    resp = self.client.get(reverse(invertRewardState, args=('1',)))
    self.assertEqual(resp.status_code, 500)
    self.assertIn(EXC_NOT_YOURS in resp.content)

如果要获取异常,请直接调用视图。在

^{pr2}$

您可以按照Ned Batchelder的建议使用上下文管理器表单。在

您可以使用assertRaisesMessage作为上下文管理器来处理预期失败的代码:

class MyTestCase(TestCase):
    def test_invertRewardState_view_fails_notmy_reward(self):
        self.client.login(email='gislaine@toto.com', password='azerty')
        url = reverse(invertRewardState, args=(1,))
        with self.assertRaisesMessage(Exception, EXC_NOT_YOURS):
            self.client.get(url)

相关问题 更多 >

    热门问题