Simulieren Sie eine MySQL-Datenbank in Python
Verwende ich Python 3.4 von der Anaconda distribution. Innerhalb dieser Verteilung fand ich die pymysql
Bibliothek, um eine Verbindung zu einer vorhandenen MySQL-Datenbank, die auf einem anderen computer befindet.
import pymysql
config = {
'user': 'my_user',
'passwd': 'my_passwd',
'host': 'my_host',
'port': my_port
}
try:
cnx = pymysql.connect(**config)
except pymysql.err.OperationalError :
sys.exit("Invalid Input: Wrong username/database or password")
Möchte ich nun schreiben Sie test-code für meine Anwendung, in die ich möchte, um eine sehr kleine Datenbank an der setUp
jeder Testfall, vorzugsweise im Speicher. Jedoch, wenn ich versuche, dies aus heiterem Himmel mit pymysql
es nicht eine Verbindung herzustellen.
def setUp(self):
config = {
'user': 'test_user',
'passwd': 'test_passwd',
'host': 'localhost'
}
cnx = pymysql.connect(**config)
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 61] Connection refused)")
Ich habe schon gegoogelt um und fand einige Dinge über SQLite
und MySQLdb
. Ich habe die folgenden Fragen:
- Ist
sqlite3
oderMySQLdb
geeignet für die Erstellung schnell eine Datenbank im Speicher? - Wie installiere ich
MySQLdb
innerhalb der Anaconda-Paket? - Ist es ein Beispiel für eine test-Datenbank erstellt, in der
setUp
? Ist das überhaupt eine gute Idee?
Habe ich nicht einen MySQL-server läuft lokal auf meinem computer.
- Die Antwort kann gut sein, um eine mysql db lokal läuft. SQLite hat viele Unterschiede zu mysql, also wäre es nicht ein guter test, um zu ersetzen, mysql mit SQLite.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide pymysql, MySQLdb und sqlite werden wollen eine echte Datenbank, um eine Verbindung herzustellen.
Wenn Sie wollen, um den code zu testen, sollten Sie nur spotten die pymysql Modul auf das Modul, das Sie testen möchten, und verwenden Sie es entsprechend
(in den test-code: Sie können setup das mock-Objekt zurückgeben hardcoded Ergebnisse an vordefinierte SQL-Anweisungen)
Überprüfen Sie die Dokumentation, die auf nativen Python-mocking-library unter:
https://docs.python.org/3/library/unittest.mock.html
Oder, für Python 2:
https://pypi.python.org/pypi/mock
Können Sie mock eine mysql-db mit testen.mysqld (
pip install testing.mysqld
)Aufgrund einiger laut Fehler-logs, die auftauchen,, wie ich dieses setup beim testen: