バグ報告 > その他 > 2.13系のPHPUnitでのバグ |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kat |
投稿日時: 2016/8/4 15:55
対応状況: −−−
|
新米 登録日: 2016/8/4 居住地: 投稿: 2 |
2.13系のPHPUnitでのバグ 2.13系のEC-CUBEを使用しておりますが、PHPUnitを実行すると、以下のバグが発生します。
・dtb_customer情報が削除され、テスト用データ2件(1001,1002)が登録される。 原因は、以下となります。tests/class/helper/SC_Helper_Purchase/SC_Helper_Purchase_completeOrderTest.php 内の、 testCompleteOrder 関数内で、 $this->helper->completeOrder() を呼んでいるが、その処理の中を見ると、 $objQuery->begin(); と、 $objQuery->commit(); を行っている箇所があります。 このコミットで、Common_TestCaseクラスのsetUp関数内でbeginしたトランザクションまでcommitしてしまっているからと思われます。(実際ここでcommitが行われていました。) 上記バグを回避する方法がありましたらご教示いただけたらと思います。 追記: 下記URLにおそらく同じ事象について記載がありました。 http://svn.ec-cube.net/open_trac/ticket/2625 上記URL内で、「特定の場合のみ発現する症状かもしれません。」と記載がありますが、おそらくトランザクションがネストしている場合、 中のトランザクションがcommitしたら、外のトランザクションもcommitされるのではないかと思います。 そのため、特定の場合でなくても発現するのではと思っています。 |
nanasess |
投稿日時: 2016/8/5 9:54
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: 2.13系のPHPUnitでのバグ SC_Query::inTransaction() で、トランザクションが開始済みかチェックしてみてはいかがでしょうか?
|
kat |
投稿日時: 2016/8/5 11:10
対応状況: −−−
|
新米 登録日: 2016/8/4 居住地: 投稿: 2 |
Re: 2.13系のPHPUnitでのバグ ご返信ありがとうございます。
引用:
上記内容で試してみたところ、想定通りの動作ができました。 ありがとうございました。 具体的には、以下のような実装となりました。 -------------------------------------------- $inTransaction = false; // トランザクション確認フラグ if ($objQuery->inTransaction()) $inTransaction = true; if (!$inTransaction) $objQuery->begin(); // トランザクションしていない場合のみ実行 〜 処理 〜 if (!$inTransaction) $objQuery->commit(); -------------------------------------------- 追記1: 基本PHPUnitではすべてロールバックするべきと思っていますが、確認したところ、 SC_Query::commitを通ってしまっている箇所がほかにもいくつかあるようです。 各箇所に上記対応を入れていこうと思います。 追記2: 上記対応を毎回行うのも大変かつ、漏れがあった場合の影響が大きすぎるため、SC_Query::commit関数を下記のように修正しました。 -------------------------------------------- public function commit() { // PHPUnitの場合はコミットしない if ($this->inTransaction() && $_SERVER['SCRIPT_NAME'] != "/usr/local/bin/phpunit") { return $this->conn->commit(); } else { return false; } } -------------------------------------------- "/usr/local/bin/phpunit"の部分は環境によって変わるかもしれませんが。 これで万が一commitに来ても、はじかれるようになるかと思います。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |