ユニットテスト機能でデータベースにいくつかの行(テスト用)を挿入した後、ヘッドが言うように、私は現在、それらを手動で削除する機能はありますが、これは実行するのがベストプラクティスではないと私は信じています。 だからそれは何ですか?ユニットテスト用に挿入した後にデータをクリーニングするベストプラクティス
答えて
Data Fixturesで作業している場合は、おそらくsetUp()
とtearDown()
メソッドを実装することをお勧めします。
ファイル、データベース、ソケットなどの外部リソースを割り当てた場合は、tearDown()
メソッドが最善の方法と思われます。 PHPUnitのドキュメントから
:
のsetUp()メソッドとtearDown()は、理論的にはありません 、実際にうまく対称です。実際には、 にsetUp()のファイルやソケットのような外部リソースが割り当てられている場合にのみtearDown()を実装する必要があります。 setUp()が単純なPHPオブジェクトを作成するだけの場合は、一般的に tearDown()を無視できます。ただし、setUp()に多くのオブジェクトを作成すると、 は、 tearDown()内のそれらのオブジェクトを指す変数をunset()してガベージコレクションできるようにすることができます。 テストケースオブジェクトのガベージコレクションは予測できません。
あなたはChapter 4. Fixturesでより多くの情報データフィクスチャを取得することができます。
「ベスト・プラクティス」は常に主観的な要求です。実際のサービスを使用するのはおそらくベストプラクティスではありませんが、現実的にはそれが私にとって最も良いと感じているからです。実際のサービスを使用することによって、私は実際には、あらゆる種類のデータベース特有の細目(例えば、外部キー制約、トリガなど)に対してテストしています。
データベーストランザクションを作成し、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'、 ' を作成
- 1. クリーニング後にmongoコレクションにデータを挿入できません
- 2. asp.netでストアドプロシージャを使用してデータを挿入するベストプラクティス
- 3. mysql - 挿入後に他のテーブルにデータを挿入するトリガー
- 4. SQLデータベースにデータを挿入した後にアプリケーションがクラッシュする
- 5. AFTER INSERT初期テーブルにデータを挿入した後、別のテーブルにデータを挿入するためのトリガー
- 6. 挿入ボタンを押した後に残るデータ
- 7. Stringrを使用したデータのクリーニング
- 8. 新しいページにデータを挿入した後の確認メッセージ
- 9. データの挿入と更新が完了した後にデータを挿入する方法
- 10. dockerコンテナでmysqlを起動した後にデータを挿入
- 11. 単語内のテキストを検索した後にデータを挿入
- 12. データをデータベースに挿入する前または挿入後にフォーマットしますか?
- 13. データベースにデータを挿入した後にページをリロードする方法
- 14. SQL Serverの - を挿入するために挿入/後 - ロールバック
- 15. 挿入されたノードの後にキャレットを挿入する
- 16. Laravelユニットテスト優しい挿入
- 17. データをデータベースに挿入した後にストップウォッチを始めるには?
- 18. Android:OpenGLの後に正しくクリーニングする
- 19. 挿入コマンドのユニットテスト
- 20. データ挿入に成功した後のラジオボタンリストのクリア方法
- 21. テーブルにデータを挿入した後にトリガーをかける方法
- 22. SQLite.swiftでデータベースを作成した後に初期データを挿入する
- 23. ページ指定後にカスタムリストにデータを挿入する方法
- 24. Spring JdbcTemplatesを使用してOracleデータベースにデータを挿入した後にIDを取得する方法
- 25. テーブルにデータを挿入した後にトリガを使用してカラムを更新する
- 26. mysqlデータベースに最後に挿入されたデータを編集するには?
- 27. Jenkinsジョブの終了後に孤立したドッカーコンテナをクリーニングする
- 28. C#を使用してSQL Serverにデータを挿入したい
- 29. フォームをループした後に値をデータベースに挿入する
- 30. PHPを使用してXMLにデータを挿入するには?
単体テストは、通常、本物のサービスと対話べきではない:通常の練習ではなく、*モック*彼らにあります。 – eggyal
Ruby on Railsは、テスト中に加えられた変更をロールバックするためにトランザクションを使用します。 – tadman
正直言って、私は実際のサービスとのやりとりが好きです。正確な「テスト」のほうが好きです。ロールバックトランザクションは自動インクリメントにのみ影響し、自動インクリメントにはロジックが適用されるべきではないので、トランザクションを開始し、テストを実行した後、トランザクションをロールバックします。暗黙的なコミット(ALTERなど)をトリガーすることによってトランザクションを中断するSQL照会を監視してください。しかし、これが私の行うことですが、ベストプラクティスかどうかはわかりません。 –