【问题标题】:Testing Try - Catch Django function. Need exception testing测试尝试 - 捕获 Django 函数。需要异常测试
【发布时间】:2021-03-22 17:30:53
【问题描述】:

这可能是一个简单的问题,但我还没有找到类似的信息。我想测试一个 get 函数,它会抛出一个通用异常,以防万一模型失败。这是我的看法:

@api_view(['GET'])
def get_group(request):
    """
    Returns all works
    """
    try:
        group = Group.objects.all()
        serializer = GroupSerializer(group, many=True)
        return Response(serializer.data)
    except Exception as e:
        return Response(data={'error': e.args}, status=500)

我有一个不会引发异常的测试,但我需要它来覆盖引发异常的测试,但我找不到方法。我已经尝试了几件事,但最接近正确的是这个。

  def test_get_group_list_fail(self):

        with self.assertRaises(Exception):

            response = self.client.get('/groups/')
            resultados = self.group.objects.all()
            esperado = CrackingGroupSerializer(resultados, many=True)
            self.assertNotEqual(esperado.data, ['fail'])
            assert response.status_code == 500

如果有人知道解决方案,请提前表示感谢。

【问题讨论】:

  • 如果您需要通用异常,请尝试 except: return HttpResponse(status=500)

标签: python-3.x django unit-testing django-rest-framework


【解决方案1】:

有一些模拟对象用于在测试期间引发代码中的异常 (https://docs.python.org/3/library/unittest.mock.html)。

试试这样的:

@patch('<module_containing_serializers>.CrackingGroupSerializer')
def test_get_group_list_fail(self, MockSerializer):
    MockSerializer.side_effect = Exception()
    response = self.client.get('/groups/')

【讨论】:

  • 我已经这样做了,但不起作用。状态代码仍然返回 200,我无法获得 except 代码块的覆盖率。还是谢谢
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多