Python Django 测试两个异常之一

标签 python django unit-testing python-unittest django-unittest

我正在尝试测试模型的某个实例是否会引发两个异常之一,但我不知道如何让它工作。这是我所拥有的:

型号

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

测试

# 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 错误,但我不知道如何查找“非此即彼”异常。

最佳答案

这可能有效:

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

但是你真的想这么做吗?一般来说,单元测试的目的是测试所有可能的路径。这只能保证测试两条路径之一。

关于Python Django 测试两个异常之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240060/

相关文章:

java - 在测试期间注入(inject)@Autowired 私有(private)字段

java - 命名空间 '/' 没有在 JUNIT 中为范围 'request' 注册范围

java - 从 python 运行 bat 文件会返回错误,而直接从 cmd 运行

python - Django 检查单个字段是否有错误并且不运行 clean()?

django - 禁止更新 django 模型字段

python - 为什么在 Django 上使用bulk_create插入带有外键的数据会返回 "property object is not callable"?

java - 支持 Java 单元测试框架中的松散集合验证

python - Python 的 MySQL 模块

Python 单元测试哲学和排序

java - jython 无法列出错误