3

データベースに接続すると(メモリ内のデータベースであっても)、単体テストの速度が低下します(現在は5分以上かかりました)。

だから私はデータベースAPIをモックすることを考えています。

実際のデータベースAPIでは、SQL構文エラーや列名の入力ミスがあると、例外が発生します。

モックオブジェクトを使用している間は、この種のチェックを行う方法は考えられません。

モックオブジェクトでこれを達成することは可能ですか?

4

1 に答える 1

3

もちろん!必要な方法で動作する独自のカスタム関数を使用して、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 を完全にモックアウトすることは決してありませんし、データベースはそれほど深刻な外部依存関係ではありません...

于 2012-10-11T14:09:21.390 に答える