如何 test/simulate 断开数据库连接
How to test/simulate broken database connection
当我的应用程序无法连接到数据库时,我已经为 return 自定义错误编写了逻辑(为什么会发生这种情况超出了这个问题的范围)。我想为此编写单元测试,特别是在以下情况下查看响应状态代码:
- 是一个有效的数据库连接。这很容易,因为每当我 运行 任何测试时,Django 都会自动创建一个 "test" 数据库。
- 没有到数据库的有效连接。不幸的是,我找不到任何关于此的文档。
是否可以通过某种方式模拟数据库连接出现问题来运行进行该测试?
您可以在测试期间简单地引发自定义错误,而不是模拟连接失败。
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。
当我的应用程序无法连接到数据库时,我已经为 return 自定义错误编写了逻辑(为什么会发生这种情况超出了这个问题的范围)。我想为此编写单元测试,特别是在以下情况下查看响应状态代码:
- 是一个有效的数据库连接。这很容易,因为每当我 运行 任何测试时,Django 都会自动创建一个 "test" 数据库。
- 没有到数据库的有效连接。不幸的是,我找不到任何关于此的文档。
是否可以通过某种方式模拟数据库连接出现问题来运行进行该测试?
您可以在测试期间简单地引发自定义错误,而不是模拟连接失败。
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。