私はsqlite::memory:
単体テストに使用してきました。これは迅速で、テストのクリーンアップを自動化します。しかし、SQL サーバーの想定により、テストでバグが見つからない可能性があるのではないかと心配しています。(この特定のコードは DB 中立であると想定されていますが、実用的にはMySQL で動作する必要があります。)
具体的な例として、sqlite への日付文字列の入力は文字列 (*) として格納されるため、まったく同じ形式で返されると思います。一方、MySQL では、それらは解析され、正規化され、一貫した形式で返されるように見えます。私のより大きな懸念は、私があまり意識していない違いがあるということです。
これを処理する最善の方法は何ですか? たとえば、mysql のすべての単体テストも繰り返します (遅い - インメモリ MySQL DB を作成する方法はありますか?)。いくつかの主要な関心領域について mysql テストを行うだけですか? MySQL を使用する機能テストに依存します (これが私の現在のアプローチですが、カバレッジはかなりむらがあります)。私が考えていない他の何か?
*: "2012-12-25 09:12:34" を指定すると、正確な文字列が返されます。「2012-12-25 09:12:34 UTC」を指定すると、正確な文字列が返されます (つまり、今回はタイムゾーンが含まれます)。「2012-12-25 09:12:34 hello world」と入力すると、「2012-12-25 09:12:34 hello world」が返されます:-(
この特定のケースでは、PHP、PDO、および PHPUnit を使用しています。私は言語に依存しない戦略を追求していますが、PDO は非常に薄い抽象化であり、接続文字列と低レベル API 呼び出しの抽象化に関係していることに注意してください。データベース間のデータ型の違いを抽象化しようとはしません。