データベースに接続すると(メモリ内のデータベースであっても)、単体テストの速度が低下します(現在は5分以上かかりました)。
だから私はデータベースAPIをモックすることを考えています。
実際のデータベースAPIでは、SQL構文エラーや列名の入力ミスがあると、例外が発生します。
モックオブジェクトを使用している間は、この種のチェックを行う方法は考えられません。
モックオブジェクトでこれを達成することは可能ですか?
もちろん!必要な方法で動作する独自のカスタム関数を使用して、db-api 関数をモックアウトできます。
from sqlite3.dbapi2 import DatabaseError
mock_db_connection = Mock()
def mock_execute(query, params):
if query == 'select firstname, lastname from student':
return [('jim', 'brown')]
elif query == 'select; firstname':
raise DatabaseError('You have an error in your SQL syntax')
mock_db_connection.execute = mock_execute
# from this point, if you've patched out your db connection with the mock,
# you can make tests against connection.execute...
モックライブラリを使用していると仮定しています。
しかし、実際には、 5 分はそれほど長くはありません。個人的な好みですが、私はこのような依存関係を保持することを好みます - API エラーをキャッチするのに役立ちます。API を完全にモックアウトすることは決してありませんし、データベースはそれほど深刻な外部依存関係ではありません...