如何 test/simulate 断开数据库连接

How to test/simulate broken database connection

当我的应用程序无法连接到数据库时,我已经为 return 自定义错误编写了逻辑(为什么会发生这种情况超出了这个问题的范围)。我想为此编写单元测试,特别是在以下情况下查看响应状态代码:

  1. 一个有效的数据库连接。这很容易,因为每当我 运行 任何测试时,Django 都会自动创建一个 "test" 数据库。
  2. 没有到数据库的有效连接。不幸的是,我找不到任何关于此的文档。

是否可以通过某种方式模拟数据库连接出现问题来运行进行该测试?

您可以在测试期间简单地引发自定义错误,而不是模拟连接失败。

raise customConnectionError('oops')

另一种可能性是使用 django.db.connection.creation 中的 destroy_test_db 方法关闭与数据库的连接。

from django.db.connection.creation import destroy_test_db


destroy_test_db('your_database_name', keepdb=True)

更多信息请查阅Django Docs: destroy_test_db

实现此目的的另一种方法是使用 mocks. You can have your middleware accept a conn object that defaults to None, then pass it a mock connection object that has a side_effect 被破坏。

我已经写了一篇关于如何做到这一点的文章here