我想寫一個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 unittest
- 4. 沒有數據庫連接的Restful API
- 5. Django測試沒有連接到數據庫
- 6. CodeIgniter數據庫連接沒有關閉
- 7. 數據庫連接沒有關閉
- 8. mysql_ *沒有連接到數據庫
- 9. 數據庫沒有連接iis
- 10. php沒有連接到mysql數據庫
- 11. 沒有連接到數據庫
- 12. Laravel沒有連接mysql數據庫
- 13. mySQL遠程數據庫沒有連接
- 14. 與數據庫沒有連接
- 15. 數據庫類沒有正確連接到我的數據庫
- 16. 沒有活動連接的數據庫連接?
- 17. Django的:池MySQL數據庫連接
- 18. Django的數據庫連接錯誤
- 19. Magento數據庫連接問題沒有數據庫密碼
- 20. 連接到很多數據庫時的django和數據庫連接池
- 21. 有沒有用於PHP的數據庫連接框架或庫?
- 22. WCF數據庫連接:只有一個數據庫連接
- 23. Django和只讀數據庫連接
- 24. 連接Django到Heroku Postgres數據庫
- 25. 分叉Django數據庫連接
- 26. 將Django連接到MongoLab數據庫
- 27. Django數據庫重新連接
- 28. django連接兩次到數據庫
- 29. 在django中做數據庫連接
- 30. 在Django中重新連接數據庫
也許你可以提出一個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