3

モデルから put 関数を呼び出すときに ndb のトランザクションが失敗した場合に何が起こるかを単体テストしたいと思います。
故意にトランザクションを失敗させることはできますか?

4

1 に答える 1

3

ドキュメントから:

関数が例外を発生させた場合、トランザクションはすぐに中止され、NDB は呼び出し元のコードがそれを認識できるように例外を再発生させます。ndb.Rollback 例外を発生させることにより、トランザクションをサイレントに強制的に失敗させることができます (この場合、関数呼び出しは None を返します)。再試行を強制するメカニズムはありません。

そのイベントをシミュレートするために、put() ルーチンの代わりに unittest で例外を発生させることができ、同じ結果をエミュレートする必要があります。なぜなら、put に失敗すると、トランザクション内のすべてのデータストア イベントがとにかくロールバックするからです。

次の種類のトランザクション例外が見つかる場合があります。

トランザクションがコミットされ、最終的に正常に適用される場合、Timeout、TransactionFailedError、または InternalError 例外を受け取ることができます。

于 2013-11-15T02:07:56.803 に答える