我想写一个unittest,检查数据库连接是否遇到异常时是否返回正确的错误消息。我试过使用connection.creation.destroy_test_db(':memory:')
,但没有按照我的预期工作。我想我应该删除表或以某种方式切断数据库连接。有这些可能吗?没有数据库连接的django unittest
4
A
回答
4
我在演示文稿Testing and Django by Carl Meyer中找到了我的答案。这是我如何做的:
from django.db import DatabaseError
from django.test import TestCase
from django.test.client import Client
import mock
class NoDBTest(TestCase):
cursor_wrapper = mock.Mock()
cursor_wrapper.side_effect = DatabaseError
@mock.patch("django.db.backends.util.CursorWrapper", cursor_wrapper)
def test_no_database_connection(self):
response = self.client.post('/signup/', form_data)
self.assertEqual(message, 'An error occured with the DB')
3
听起来像这样是mocking的工作。例如,如果你正在使用MySQL,你可以把一个side_effect
上connect
方法,像这样:
from django.test import TestCase
from mock import patch
import MySQLdb
class DBTestCase(TestCase):
def test_connection_error(self):
with patch.object(MySQLdb, 'connect') as connect_method:
connect_method.side_effect = Exception("Database Connection Error")
# your assertions here
希望有所帮助。
+0
感谢您的答复!我做了一些稍微不同的事,看我的答案。 – tampakrap 2013-06-08 19:19:00
2
我一直在寻找一个数据库连接超时的情况下,Django的实际HTTP响应代码使用pymysql
时。以下测试证实401 Unauthorized
时pymysql
产生了OperationalError
。
from unittest.mock import patch
import pymysql
from django.test import TestCase, Client
class TestDatabaseOutage(TestCase):
client = None
def setUp(self):
self.client = Client()
def test_database_connection_timeout_returns_401(self):
with patch.object(pymysql, 'connect') as connect_method:
message = "Can't connect to MySQL server on 'some_database.example.com' ([Errno 110] Connection timed out)"
connect_method.side_effect = pymysql.OperationalError(2003, message)
response = self.client.get('/')
self.assertEqual(response.status_code, 401)
相关问题
- 1. 没有数据库连接
- 2. Django的psycopg2.OperationalError:fe_sendauth错误,但没有连接到PostgreSQL数据库
- 3. Django测试没有连接到数据库
- 4. mysql_ *没有连接到数据库
- 5. Laravel没有连接mysql数据库
- 6. CodeIgniter数据库连接没有关闭
- 7. 数据库没有连接iis
- 8. mySQL远程数据库没有连接
- 9. 数据库类没有正确连接到我的数据库
- 10. Django的:池MySQL数据库连接
- 11. 连接到很多数据库时的django和数据库连接池
- 12. 有没有用于PHP的数据库连接框架或库?
- 13. WCF数据库连接:只有一个数据库连接
- 14. Django和只读数据库连接
- 15. django连接两次到数据库
- 16. django mysql数据库连接池
- 17. Django数据库连接问题
- 18. 连接Django到Heroku Postgres数据库
- 19. 在Django中重新连接数据库
- 20. 将Django连接到MongoLab数据库
- 21. Django数据库重新连接
- 22. Django REST UnitTest没有提交文件
- 23. Django的 - 没有击中数据库
- 24. 有没有连接到数据库使用NHibernate的方法?
- 25. 防止Django创建表 - 连接到现有数据库
- 26. 来自Web应用程序的数据库连接没有连接池
- 27. 消费者没有返回连接到我的数据库连接池
- 28. 连接数据库
- 29. 数据库连接
- 30. 数据库连接
也许你可以提出一个DatabaseError并抓住它。 from django.db import DatabaseError raise DatabaseError 这里列出了默认的django异常https://docs.djangoproject.com/zh/dev/ref/exceptions/ – Azd325 2013-05-12 13:42:59
我很困惑。这个问题的标题是“没有连接”,但在你说的正文中,你试图断言当有异常时返回的消息。像什么?重复密钥?标题和身体不太匹配,我只是困惑。澄清? – CppLearner 2013-05-12 20:08:41
没有连接到数据库引发DatabaseError异常,这是我试图导致和断言我的web应用程序在这种情况下打印的错误消息 – tampakrap 2013-06-08 19:18:23