2016-04-29 12 views
2

ユニットテスト機能でデータベースにいくつかの行(テスト用)を挿入した後、ヘッドが言うように、私は現在、それらを手動で削除する機能はありますが、これは実行するのがベストプラクティスではないと私は信じています。 だからそれは何ですか?ユニットテスト用に挿入した後にデータをクリーニングするベストプラクティス

+2

単体テストは、通常、本物のサービスと対話べきではない:通常の練習ではなく、*モック*彼らにあります。 – eggyal

+1

Ruby on Railsは、テスト中に加えられた変更をロールバックするためにトランザクションを使用します。 – tadman

+0

正直言って、私は実際のサービスとのやりとりが好きです。正確な「テスト」のほうが好きです。ロールバックトランザクションは自動インクリメントにのみ影響し、自動インクリメントにはロジックが適用されるべきではないので、トランザクションを開始し、テストを実行した後、トランザクションをロールバックします。暗黙的なコミット(ALTERなど)をトリガーすることによってトランザクションを中断するSQL照会を監視してください。しかし、これが私の行うことですが、ベストプラクティスかどうかはわかりません。 –

答えて

0

Data Fixturesで作業している場合は、おそらくsetUp()tearDown()メソッドを実装することをお勧めします。
ファイル、データベース、ソケットなどの外部リソースを割り当てた場合は、tearDown()メソッドが最善の方法と思われます。 PHPUnitのドキュメントから

のsetUp()メソッドとtearDown()は、理論的にはありません 、実際にうまく対称です。実際には、 にsetUp()のファイルやソケットのような外部リソースが割り当てられている場合にのみtearDown()を実装する必要があります。 setUp()が単純なPHPオブジェクトを作成するだけの場合は、一般的に tearDown()を無視できます。ただし、setUp()に多くのオブジェクトを作成すると、 は、 tearDown()内のそれらのオブジェクトを指す変数をunset()してガベージコレクションできるようにすることができます。 テストケースオブジェクトのガベージコレクションは予測できません。

あなたはChapter 4. Fixturesでより多くの情報データフィクスチャを取得することができます。

0

「ベスト・プラクティス」は常に主観的な要求です。実際のサービスを使用するのはおそらくベストプラクティスではありませんが、現実的にはそれが私にとって最も良いと感じているからです。実際のサービスを使用することによって、私は実際には、あらゆる種類のデータベース特有の細目(例えば、外部キー制約、トリガなど)に対してテストしています。

データベーストランザクションを作成し、SQLクエリを実行してからトランザクションをロールバックすることができます。

  • あなたが実行していない自動インクリメントフィールド(すでにとにかく、やるべきこととして)
  • から任意のロジックを暗示していない。しかし、これを実行するためには、次の2つの仮定を必要とします暗黙的なコミットを実行するトランザクションの範囲内のSQL照会。暗黙のコミットはロールバックできません。

次のようにMySQLのための暗黙のコミットは、according to its documentationです:

'ALTER TABLEの'、 、 'DROP INDEX'、 'のDROP TABLE'、 「TABLEの名前を変更 'INDEXを作成' 」 'は、CREATE TABLEを' 'DATABASE' 'DROPデータベース' 'TRUNCATE表' 'ALTER PROCEDURE' 'を作成' プロシージャを作成し 'DROPのPROCEDURE'、 'ALTER機能'、 '関数を作成'、 'ドロップ機能'、 'ALTER VIEW'、 'CREATE TRIGGERを'、 'VIEWを作成'、 'DROPのTRIGGER'、 「DROP VIEW」、 ' 'USERの名前を変更USER'、 'DROPのUSER'、 ' を作成

関連する問題