問題タブ [database-testing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
junit - DbUnit:生成されたIDをアサートする方法
データベース(MySQLの自動インクリメント列など)によって生成されたIDをアサートするためにDbUnitを使用する方法のアイデア/ヒントが必要です。私には非常に単純なケースがありますが、現時点では問題があります。
2つのテーブル:main
およびrelated
。main.id
列は自動インクリメントです。関連するテーブルには外部キーがあります:related.main_id
-> main.id
。私のテストケースでは、アプリケーションは両方のテーブルに複数のエントリを挿入するため、データセットは次のようになります。
順序として、挿入がどのように実行されるかは不明です-テストの前にテーブルを単純にクリア/切り捨てて、事前に事前定義されたIDを使用することはできません(たとえば、「ABC」エントリが最初に来るので、ID1
と「DEF」を2番目に取得します--gets 2
)。私がそのようにテストを書くと(これは間違っているでしょう)、運が良ければうまくいくこともあれば、うまくいかないこともあります。
そのようなケースをテストするためのクリーンな方法はありますか?エントリがDBで適切に作成およびリンクされていることを表明したいので、エントリが存在するだけではありません(自動インクリメント列を単に無視する場合)。
c# - 単体テストとテストデータベースの使用
NUnitとテストデータベースを使用してコードを検証するにはどうすればよいですか?理論的にはモック(moq)を使用しますが、私のコードはより保守的な形で修正されており、すべてのモックをセットアップする必要はありません。
テストプロジェクトを作成してから、実際にテストデータベースに接続して、アプリで実行するようにコードを実行するテストを作成しますか?次に、assertsを使用してコードをチェックし、要求しているものが正しく返されていることを確認しますか?
sqlite - インメモリ sqlite DB を使用して単体テストを高速化する場合に DB deps を回避するための提案
私は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 呼び出しの抽象化に関係していることに注意してください。データベース間のデータ型の違いを抽象化しようとはしません。
database - データベースの負荷とパフォーマンスのテスト
これは初めてのことですが、私のチームからデータベースでいくつかのテストを行うように依頼されましたが、どのようにアプローチすればよいかわかりません。データベースでテストするということは、データベースにレコードを挿入する速度を確認する必要があるということです。そして、それが耐えられる圧力まで。データベースの負荷およびパフォーマンス テストと同様です。これから使用するデータベースはXPRESSmpです。
したがって、データベースをテストする必要があるときに通常行うテストの種類と、これを調べるために検討できるツールについて、誰でも助けてもらえますか。私が見た記事のほとんどは、主に Oracle と MySQL に関連しています。しかし、これはまったく新しいデータベースです。
私が考えることができる 1 つのアプローチは、非常に高速で XMP にデータを送り込む X 個のスレッドを持つマルチスレッド プログラムを作成することです。そして、各スレッドにかかる時間を測定し続けます。データベースをテストするために他に何ができますか?
私のチームは、あなたのテストを行ってデータベースを破壊するように私に依頼しましたが、どのような状況で破壊され、その背後にある理由が何であったかを知る必要があります.
また、データベースでテストを行う際に知っておくべき重要なポイントとは何ですか。
PS 別の LnP マシンでこのテストを行います。
unit-testing - 既知の状態にリセットして、MySQL in Play フレームワークなどの非メモリ内データベースに対して単体テストを作成する方法は?
Play フレームワーク 2.1.0 でリレーショナル データベースを使用するコードをカバーする単体テストを作成したいと考えています。これには多くの可能性があり、すべてが問題を引き起こします。
インメモリ H2 データベースでのテスト
Play フレームワークのドキュメントでは、H2 メモリ内データベースで単体テストを実行することを提案しています。開発と運用に使用されるメイン データベースが他のソフトウェア (つまり、MySQL) を使用している場合でも:
私のアプリケーションは、ストアド プロシージャなどの複雑な RDBMS 機能を使用せず、ほとんどのデータベース アクセス ケースは ebean 呼び出しであるため、MySQL と H2 の両方と互換性があるはずです。
ただし、進化のテーブル作成ステートメントは、 、 などを指定するなど、MySQL 固有の機能を使用しますENGINE = InnoDB
。DEFAULT CHARACTER SET = utf8
のこれらの独自の部分を削除するとCREATE TABLE
、MySQL は、私が制御できず、バージョンに依存するデフォルト設定を使用するのではないかと心配しています。アプリケーションをテストおよび開発するには、メインの MySQL 構成を変更する必要があります。
このアプローチを使用した人はいますか (進化を MySQL と H2 の両方と互換性があります)?
それを処理する方法の他のアイデア:
- MySQL と H2 の別々の進化 (良い考えではありません)
- H2 に追加の MySQL を無視させるいくつかの方法
create table
(MySQL 互換モードは機能しませんdefault character set
。方法がわかりません。
メイン データベースと同じデータベース ドライバーでのテスト
H2 インメモリ データベースの唯一の利点は、高速であることと、実際の環境に近いため、開発/運用データベースよりも同じデータベース ドライバーでのテストの方が優れている可能性があることです。
Play フレームワークでどのように行うことができますか?
試した:
ここでは進化が機能しているように見えますが、各テストの前にデータベースをクリーンアップするにはどうすればよいでしょうか? 各テーブルを切り捨てるカスタム コードを作成することによって? テーブルを削除する場合、進化は次のテストの前に再度実行されますか、それともplay test
コマンドごとに 1 回適用されますか? それともHelpers.fakeApplication()
呼び出しごとに 1 回ですか?
ここでのベストプラクティスは何ですか? dbunitについて聞いたことがありますが、あまり苦労せずに統合することは可能ですか?
testing - 2 つのデータベース データが同一かどうかをテストする
テスト プロジェクトでは、データベースが必要に応じて機能しているかどうかをテストする必要があります。また、2 つのデータベースが与えられた場合に、DB 内のデータが同一かどうかを確認する必要があります。では、このタスクを実行するための事前定義されたアルゴリズムはありますか?
unit-testing - 単体テストと統合テストの例
CompanyService の findCompany() メソッドをテストする Test クラスに、次の 4 つのテストを作成しました。
私の理解では、これらのうち最初の 3 つは単体テストです。findCompany() メソッドの動作をテストし、メソッドがさまざまな入力に対してどのように応答するかを確認します。4 番目のテストは、同じクラスに配置されていますが、実際には統合テストのように思えます。後で見つけることができるように、最初に会社をデータベースに追加する必要があります。これにより、外部依存関係 (addCompany() およびデータベース) が導入されます。
私は正しいですか?はいの場合、既存のオブジェクトを見つけるための単体テストをどのように行うべきですか? サービスを「見つける」ためにモックするだけですか?それはテストの意図を殺すと思います。
ここでのガイダンスに感謝します。
h2 - Java を使用して H2 データベースからテーブルにアクセスできない
H2 データベースを使用してデータベース テスト用のスクリプトを作成しました。データベース内のテーブルを読み取れないという問題に直面しています。「テーブルが見つかりません」というメッセージと以下のコードをスローします。ただし、データベースに接続できます。
構成: データベース エンジン用の h2-3.3.jar および h2.jar
スクリプトの実行後、エラーメッセージが表示されました
「org.h2.jdbc.JdbcSQLException: テーブル KM_AUDITLOGS が見つかりません; SQL ステートメント: SELECT * FROM KM_AUDITLOGS [42102-73]」
誰でも私を助けることができますか?
sql - Oracleを使用して2回からレコードを取得する方法
callinfo という名前のテーブルがあり、以下のようなレコードがあります。
午後 1 時から午後 1 時 15 分の間に callinfo からレコードを取得するにはどうすればよいですか?