バージョン選択

フォーラム

メニュー

オンライン状況

56 人のユーザが現在オンラインです。 (47 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 55
98win もっと...

サイト内検索

バグ報告 > その他 > 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でのバグ
ご返信ありがとうございます。
引用:

SC_Query::inTransaction() で、トランザクションが開始済みかチェックしてみてはいかがでしょうか?


上記内容で試してみたところ、想定通りの動作ができました。
ありがとうございました。

具体的には、以下のような実装となりました。

--------------------------------------------

$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に来ても、はじかれるようになるかと思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,002名です
総投稿数は110,020件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.