2009-07-06 12 views
5

Chcę napisać kilka unittests dla aplikacji, która używa MySQL. Nie chcę jednak łączyć się z prawdziwą bazą danych mysql, ale raczej z tymczasową, która w ogóle nie wymaga żadnego serwera SQL.testowanie aplikacji python, które używają mysql

Dowolna biblioteka (nie mogłem znaleźć niczego w Google)? Dowolny wzór projektu? Zauważ, że DIP nie działa, ponieważ nadal będę musiał przetestować wstrzykniętą klasę.

+0

wypróbuj pypi.python.org/pypi/pg13, który ma symulator SQL. uwaga: napisałem to. – amwinter

Odpowiedz

8

Nie ma na to dobrego sposobu. Chcesz uruchomić swoje zapytania na prawdziwym serwerze MySQL, w przeciwnym razie nie wiesz, czy będą działać, czy nie.

Nie oznacza to jednak, że trzeba je uruchamiać na serwerze produkcyjnym. Mamy skrypty, które tworzą bazę danych testów jednostkowych, a następnie odrywamy ją po uruchomieniu testów jednostkowych. W ten sposób nie musimy utrzymywać statycznej testowej bazy danych, ale nadal będziemy testować na prawdziwym serwerze.

4

Użyłem python-mock i mox do takich celów (ekstremalnie lekkich testów, które absolutnie nie wymaga żadnego serwera SQL), ale dla bardziej szczegółowych testów/dogłębnego, zaczynając i zapełnianie lokalnej instancji MySQL nie jest również złe.

Niestety, dialekt SQL SQL i MySQL różnią się na tyle, że próba użycia tego pierwszego do testów jest nieco niepraktyczna, chyba że używasz ORM (Django, SQLObject, SQLAlchemy, ...), które mogą ukryć różnice dialektów.

Powiązane problemy