0

SqlAlchemy (v0.7.4) を使用するメッセージ プロセッサをテストしています。私のテストでは、Sqlite でFixture (v1.4)を使用して、一時データベースをセットアップおよび破棄しています。フィクスチャ データには、プロセッサの実行時に更新されるステータス フィールドを含むファイル テーブルが含まれています。

テスト、テスト対象のプロセッサ、フィクスチャがすべて同じデータベース セッションを共有していることを確認しました。

プロセッサが実行される前と実行後に、ファイル レコードのステータス フィールドを照会します。値を変更する必要があります (「処理中」を表す int から「完了」に)。フィールドが正しい新しいステータス値で更新されていることを確認するために、プロセッサ内にデバッグ コードを追加しました。また、プロセッサが生成する出力ファイルの内容をチェックすることで、プロセッサが正常に動作することを個別に検証することもできます。ただし、テストのデータベース セッションを使用してテストの最後にステータスを照会すると、常に最初の値と同じになります。

最終ステータスクエリの前に、セッションを明示的にコミットしてフラッシュしようとしました。何も機能しません。何か案は?

4

1 に答える 1

3

ここでの問題は2つありました:1)私のテストはメモリ内の一時的なSqliteデータベースを使用していました。2)私の機能テストでは、プロセッサは新しいプロセス内で生成されていました。

したがって、テスト自体と同じデータベースセッションを使用するようにプロセッサクラスをハッキングしたとしても、プロセッサとデータベースは別々のメモリスペースにあるため、プロセッサが行っていたデータベースの更新は、結果を検証しようとするテストコードからは見えませんでした。

解決策:メモリ内ではなくファイル内に一時的なSqliteデータベースを設定します。

さらに、Fixtureが分解を行うときに、フィクスチャデータがセットアップされた状態と同じ状態でない場合(このセクションの最後に記載)、エラーがスローされることを発見しました。しかし、それは別の問題でした。

于 2012-04-04T15:34:17.497 に答える