Python Django测试两种例外之一

问题描述 投票:1回答:1

我试图测试一个模型的某个实例将引发两个异常之一,但我无法弄清楚如何让它工作。这是我有的:

Model

class AvailablePermissions(models.Model):
    # Main Checkbox.
    category = models.CharField(
        max_length=100,
    )
    # Checkboxes under Main Checkbox.
    subcategory = models.CharField(
        max_length=100,
    )
    # The view to grant permission to.
    view_name= models.CharField(
        max_length=255,
        unique=True,
    )

    def full_clean_save(self):
        try:
            name = resolve(reverse(f'{self.view_name}'))
            self.full_clean()
            self.save()
        except NoReverseMatch as nrme:
            raise nrme
        except ValidationError as ve:
            raise ve
        return self

Test

# Default permission object "(**permission)"
permission = {
            'category': 'Category',
            'subcategory': 'Subcategory',
            'view_name': 'employee:create_profile',
            }
available_permission = AvailablePermissions(**permission)

class AvailablePermissionsValidationTest(TestCase):

    def test_AvailablePermissions_will_not_save_blank_permissions(self):
        for field in permission:
            original_value = permission[field]
            permission[field] = ''

            with self.assertRaises(ValidationError or NoReverseMatch):
                AvailablePermissions(
                    **permission
                ).full_clean_save()

            permission[field] = original_value

它抛出NoReverseMatch错误,但我无法弄清楚如何寻找“或”或“异常”。

python django unit-testing python-unittest django-unittest
1个回答
1
投票

这可能有效:

with self.assertRaises(ValidationError):
    try:
        AvailablePermissions(
            **permission
        ).full_clean_save()
    except NoReverseMatch:
        raise ValidationError 

但你真的想这样做吗?通常,在单元测试中,希望是运用所有可能的路径。这样可以保证测试两条路径中的一条。

© www.soinside.com 2019 - 2024. All rights reserved.