gpt4 book ai didi

python - Django Model.objects.create() 数据库异常不过滤

转载 作者:行者123 更新时间:2023-11-28 17:05:54 27 4
gpt4 key购买 nike

我正在尝试通过创建父对象不存在的子对象,使用 py.test 单元测试在 Django 中测试约束验证。

@pytest.mark.django_db
def test_child_with_missing_parent():
with pytest.raises(django.db.utils.IntegrityError):
Child.objects.create(parent_id=1337)

异常被抛出,但无法被捕获——它只是显示在 stderr 中。我正在使用 pytest.mark.xfail现在,但它实际上只是一个“跳过”—— 1 xfailed, 1 xpassed 是结果。我怎么能在这样的预期场景中捕获这样的错误?

这是出现在控制台但无法捕获的异常/错误:

self = <django.db.backends.utils.CursorWrapper object at 0x7fe1e2dea5f8>, sql = 'SET CONSTRAINTS ALL IMMEDIATE', params = None
ignored_wrapper_args = (False, {'connection': <django.db.backends.postgresql.base.DatabaseWrapper object at 0x7fe1ec724128>, 'cursor': <django.db.backends.utils.CursorWrapper object at 0x7fe1e2dea5f8>})

def _execute(self, sql, params, *ignored_wrapper_args):
self.db.validate_no_broken_transaction()
with self.db.wrap_database_errors:
if params is None:
> return self.cursor.execute(sql)
E psycopg2.IntegrityError: insert or update on table "myapp_child" violates foreign key constraint "myapp_re_parent_id_537da634_fk_myapp_calc"
E DETAIL: Key (parent_id)=(1337) is not present in table "myapp_parent".

/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py:83: IntegrityError

The above exception was the direct cause of the following exception:

self = <django.test.testcases.TestCase testMethod=__init__>

最佳答案

看起来您正在 try catch 与引发的异常不同的异常。 psycopg2.IntegrityErrordjango.db.utils.IntegrityError 不同 - 由于某些原因,Django 没有将此异常包装在自己的包装器中。

这应该有效:

with pytest.raises(psycopg2.IntegrityError):
Child.objects.create(parent_id=1337)

关于python - Django Model.objects.create() 数据库异常不过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com