問題タブ [integration-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.
unit-testing - 単体テスト、統合テスト、受け入れテストのどちらに重点を置いていますか?
私が最終的に参加するほとんどのギグでは、単体テストがほとんどまたはまったくありません。通常、単体テストと呼ばれるものは実際には統合テストであり、開発者のマシンから実行されることはめったにありません。私は通常、この 2 つの違いを説教することから伝道を開始し、人々に非常に焦点を絞った単体テストを作成してもらい、統合テストは後で任せるようにします。つまり、十分な数の人が単体テストを作成し、統合の作成に「進む」ことができるようになったときです。テスト。受け入れまたはシステム レベルのテストは、通常、開発者によって手動で処理され、次に QA 部門によって処理されます。
私の質問は、アジャイル環境の外で作業する場合、単体テスト、統合テスト、および受け入れテストにどれだけの労力を費やしていますか?また、何から最も価値があると思いますか?
unit-testing - コマンドライン統合テスト用の PHPUnit
最近、製品の Email2SMS 機能に取り組み始めました。私がプロジェクトに参加したとき、このコンポーネントは単体テストによるコード カバレッジがゼロでした。レガシーコード。
私はそれに取り組み始めて以来、テストファーストのアプローチを使用していました。しかし、コードの品質は非常に低かった。それを分割して単体テストで小さなチャンクをテストするのは非常に困難だったので、統合テストを書くことにしました。
メッセージ情報を受け取り、DB でユーザーを検索し、問題がなければ情報を保存する php スクリプトがあります。
それは悪いですか?この問題をどのように解決しますか?
performance - TDDを実行する際のパフォーマンステストのベストプラクティス?
パフォーマンスの調整が非常に必要なプロジェクトに取り組んでいます。
最適化によってプログラムの速度が向上しない場合に失敗するテストを作成するにはどうすればよいですか?
少し詳しく説明します。
問題は、最適化するパーツを見つけることではありません。そのために、さまざまなプロファイリングおよびベンチマークツールを使用できます。
問題は、自動テストを使用して、特定の最適化が実際に意図した効果をもたらしたことを文書化することです。また、テストスイートを使用して、パフォーマンスの低下の可能性を後で発見できれば非常に望ましいでしょう。
プロファイリングツールを実行していくつかの値を取得し、最適化されたコードがより良い値を生成すると断言できると思います。ただし、これに関する明らかな問題は、ベンチマーク値が厳密な値ではないことです。それらは地域の環境によって異なります。
では、この種の統合テストを行うために常に同じマシンを使用するという答えはありますか?その場合、同じハードウェアでもベンチマークの結果が異なる可能性があるため、結果に多少のあいまいさを考慮する必要があります。では、これをどのように考慮に入れるのでしょうか?
または、おそらく答えは、プログラムの古いバージョンを保持し、前後の結果を比較することですか?これはほとんど環境にとらわれないので、私の好みの方法です。誰かがこのアプローチの経験がありますか?最新バージョンのパフォーマンスが少なくとも前のバージョンと同じくらい良ければ、すべてのテストに合格することができれば、古いバージョンを1つ保持するだけでよいと思います。
sql-server - 多様なデータベースのテスト環境のセットアップ
さまざまなデータベース製品に対して動作する必要があるコードを書いています。
- MySql
- SQL Server 2000 ~ 2008
- PostgreSQL
- オラクル 9i & 10g
- Jet 4.0 (MS アクセス)
- MSDE
- Sybase Adaptive Server Anywhere
- Sybase Sql Anywhere
- プログレス OpenEdge
継続的統合ビルドの一部として、各データベース製品に対して実行する必要がある汎用統合テストのセットがあります。
他の人も同様のテスト環境をセットアップする必要があったと確信しています。私はその知恵の一部を利用したいと思います-最終的にどの戦略を使用するか、何がうまく機能し、何がうまく機能しなかったか?
いくつかの考え:
- 製品ごとに仮想マシンを分離し、それぞれに少量のメモリを割り当てます (特定のシナリオでは管理が容易で、個々の製品のセットアップがわずかに異なる場合)。
- すべての製品に対して数台の仮想マシンまたは 1 台の仮想マシン (つまり、おそらく postgresql と mysql 用の ubuntu ボックス、残りの製品用の Windows 2008 サーバー マシン) - 私は 1 つまたは 2 つの vm が好きです。テストを実行するための環境、つまり、移動中/オフサイトの場合、私のラップトップはおそらく 8 または 10 個の小さな VM を実行して停止する可能性があります。
最後に、Oracle や Progress OpenEdge などの一部の商用製品の法外なコストにどのように取り組んできましたか? また、以前のバージョンはまだ入手可能ですか?
integration-testing - 統合テスト - どのレベルでテストし、どのようにセットアップしますか?
アプリでエラーが発生しましたが、これはおそらくいくつかの統合テストでキャッチできたはずです。
私の質問は、これらのテストのセットアップと、テストを実行するコードのレイヤーに関連しています。
設定
多くの統合テストが必要であることを考えると、テストごとにテスト データベースを作成および削除したくありません。私の考えは次のとおりです。
- 私の開発データベースの隣にあるテストデータベースを持っています
- テストの前に、スキーマを正しく設定し、必要なデータを挿入するリセット スクリプトを実行します (テスト ケース固有ではありません)。
- このテスト データベースを実際のデータベースのように使用するだけです。
ただし、[セットアップ] ごとに Fluent NHib 構成を実行する必要があるのは非常に無駄に思えます。これだけは厳しいですか?ここでのオプションは何ですか?
私のセッションは現在 UoW パターンでラップされており、作成と破棄は begin_request と end_request (MVC Web アプリケーション) でそれぞれ実行されます。この問題を解決するためにテストでうまく動作するようにこれを変更する必要がありますか?
テスト
実際にいくつかのテストを書くことになると、どのようにすればよいですか?
可能な限り最高レベル (MVC コントローラー アクション) からテストするか、最低レベル (リポジトリ) からテストする必要があります。
最低でテストすると、すべてのデータを手動でハードコーディングする必要があります。これにより、コードの変更に対してテストが脆弱になり、実行時にコードで実際に何が起こるかを表すこともできなくなります。最高でテストする場合、すべての IoCC セットアップを実行して、依存関係が注入され、すべてが機能するようにする必要があります (これも [SetUp] ごとに繰り返しますか?)。
うーん!私は道に迷っています。誰かが私を正しい方向に向けてくれます!
ありがとう
.net - 統合 (Selenium) テスト後のデータベースのロールバック
Selenium などの統合テスト フレームワークから作成されたデータベース トランザクションをロールバックするためのベスト プラクティスまたは推奨される方法について、誰か提案はありますか?
現在の状況は次のとおりです。ユニット テスト環境で正常に動作する多数のユニット テストを含む .net Web プロジェクトがあります。各テストは、[SetUp] でトランザクションを開く親クラスを継承し、トランザクションをロールバックします。 [ティアダウン]。各テストの後、単体テスト データベースは元の状態に復元されます。
ただし、統合環境に到達すると状況が変わります。当社の継続的インテグレーション サーバーは、コミットを自動的にコンパイルしてテスト サーバーにプッシュするため、サーバーは常に最新のコードで実行されます。また、Selenium インスタンスをセットアップして、サイトとのユーザー インタラクションを自動化しました。Selenium テストは基本的に既存の Selenium サーバーと通信し、サーバーに次のように伝えます。「ブラウザーを起動してhttp://testsite/TestPage.aspxに移動し、id が「def」のフォーム フィールドにテキスト「abc」を入力します。アサートします。新しいページにテキスト 'xyz' が含まれています"
各テストはバニラ単体テストと同様の方法で実行されますが、重要な例外があります: Selenium によって行われた変更は、完全に異なるスレッド/アプリケーションで行われるため、できません (私は *できないと思います.少なくとも) テスト ティアダウンでそれらをロールバックします。
これに対する適切な解決策はまだ見つかっていません。現在、SqlCommand を使用して sql ステートメントを実行し、データベースをバックアップしています。テストの最後に、データベースをシングル ユーザーに設定し、現在のデータベースを削除して復元しています。古いコピー - これは理想的とは言えません。これは、DB にアタッチされたアプリケーションを事実上強制終了し、アプリを再度初期化する必要があるためです。
これは以前に解決された問題ですか?どんなアドバイスも素晴らしいでしょう。
ありがとう!
unit-testing - 自動化された単体テストと自動化された統合テストの長所と短所は何ですか?
最近、既存の Java アプリケーションに自動テストを追加しています。
私たちが持っているもの
これらのテストの大部分は統合テストであり、次のような呼び出しのスタックをカバーする場合があります。
- サーブレットへの HTTP ポスト
- サーブレットはリクエストを検証し、ビジネス層を呼び出します
- ビジネスレイヤーは、休止状態などを介して一連のことを行い、いくつかのデータベーステーブルを更新します
- サーブレットはいくつかの XML を生成し、これを XSLT を介して実行して応答 HTML を生成します。
次に、サーブレットが正しい XML で応答したこと、および正しい行がデータベース (開発中の Oracle インスタンス) に存在することを確認します。その後、これらの行は削除されます。
単一のメソッド呼び出しをチェックするいくつかの小さな単体テストもあります。
これらのテストはすべて、ナイトリー (またはアドホック) ビルドの一部として実行されます。
質問
システムの境界をチェックしているので、これは良いことのように思えます。一方はサーブレットのリクエスト/レスポンス、もう一方はデータベースです。これらが機能する場合は、自由にリファクタリングしたり、途中で何かをいじったりして、テスト中のサーブレットが引き続き機能することを確信できます。
このアプローチでは、どのような問題が発生する可能性がありますか?
個々のクラスにさらに多くの単体テストを追加することがどのように役立つかわかりません。テストを破棄して書き直す必要が生じる可能性が非常に高いため、リファクタリングが難しくなるのではないでしょうか?
integration-testing - WatiN テスト データのリセット/クリーンアップ
現在、人々はどのようにデータをリセットしたり、WatiN/Wartir テストの残りのテストをクリーンアップしたりしているのでしょうか?
たとえば、ユーザーをシステムに追加するテストがあり、ユーザー名が一意である必要があるとします。明らかに、ユーザーなしでの最初の実行は正常に動作するはずですが、2 回目の実行は手動の介入なしでは失敗します。
.net - 単体テストと統合テストを区別するにはどうすればよいですか?
私はテストとモックに不慣れです。計算を実行し、DALを呼び出してデータベースを更新し、トランザクションを管理するビジネスロジッククラスをテストしようとしています。私は単体テストを行うためにモックを使用していますが、完全統合テストはこれらすべてにどのように適合しますか。基本的にまったく同じテストがありますが、実際のDALを使用しますか、それともまったく異なることをしますか?
unit-testing - Visual Studio Test suite / NUnitとの統合テストMSMQを自動化するための最良の方法は何ですか?
私が書いているMSMQアプリケーションの一連の自動化された単体テストを作成したいと思います。私が見ているように、課題は、テストメソッドからのイベントハンドラーにどのように対応するかです。つまり、テストメソッドからメッセージを送信し、メッセージが受信されて処理されたという結果をそのテストメソッドに返す必要があります。私はこれをどのように達成するかについての手がかりがありません、そしてどんな方向でも大いに感謝されるでしょう。