タグ付けされた質問 「integration-tests」

統合テストは、個々のソフトウェアモジュールを組み合わせてグループとしてテストするソフトウェアテストのフェーズです。モックやスタブは必要ありません。すべてが本番環境と同じようにテストされます。

1
画像処理コードを単体テストする方法は?
私は画像処理(主にOCR)に取り組んでおり、開発に単体テストをどのように統合すべきか疑問に思っています。 私はすでに、より一般的なタイプのコードに対して単体テストを使用していますが、画像処理コードを処理するとき、その処理方法がわかりません。この種のコードには常に画像データの入出力が必要であり、これを模倣することは明らかではありません。今のところ、主に統合テストを行っていますが、実行には時間がかかります。この種のコードをユニットテストに分割して、より迅速に実行できるようにするためのアイデアが欲しいです。 編集:キャラクターの分析は、複数の回転、スケーリング、および形態学的操作を含む多くのステップを経ることができます。これらの手順は、アルゴリズムの開発中に頻繁に変更されます。したがって、テスト中に入力と期待される出力は大きく変化する可能性があります。各文字は100x100ピクセルにすることができるため、コード内でハードコーディングしたり、生成されたデータを操作したりするのは問題ありません。

3
自動化されたテストを人気にする方法は?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 2年前に閉店。 私たちのコードベースは現在20年間成長しています。私たちは500klocで作業する約10人の開発者+ sqaです。少し前に、私たちの小さなチーム(2人の開発者、1人はsqaから)が自動化されたテストプログラムに取り組み始めました。現在、1回の実行には11時間かかり、どういうわけか統合テストです。この問題を解決し、誤検知を減らすために取り組んでおり、その点で大きな進歩を遂げています。しかし、詳細は重要ではありません。 問題なく機能しており、改善を続けています。私たち(小さなチーム)はとても気に入っています。何かを壊すと、2か月後ではなく1日後にsqaが表示されます。また、私たちのマネージャー(dev + sqa)はこのアイデアを気に入っています。しかし、チームの他の人々はテスト結果を無視します。彼らの心では、チェックイン後にテストが失敗する場合、それはテストの問題であり、コードの変更の問題ではなく、単なるおもちゃのプロジェクトです。テストの失敗が本当のエラーである場合、私たちは何度か議論しました。ほとんどの場合です。 私たちは何かを強制することはできませんし、したくありません。自動テストが重要であることをどのように示すことができますか?

2
テスト対象のシステムからクラスを抽出するときに、ユニットテストをリファクタリングする必要がありますか?
いくつかのことを行うこのクラスを作成しました(おそらくこれは単一責任原則の違反です)。私はプロジェクトのいくつかの他の部分が必要であることを今実感作品そのロジックのを、私はそれを公開するつもりだ方法は、私のオリジナルテスト対象システムのうち、クラスを抽出することです。 テストコードを変更せずにこれを行うことができると予想していますが、完了したら、テストはユニットテストではなくなったと主張できます。元のクラスと抽出したクラスをテストします。つまり、テストケースは1つですが、テスト対象のシステムは2つになります。 完了したら、テストコードをリファクタリングすることになっていますか?IE:ExtractedClassTestを作成し、関連するすべてのテストをOriginalClassTestからそこに移動しますか?これは少しリスクが高いようです:プロセスのカバレッジを失う可能性があります。テストを移動するほど簡単ではないかもしれません。等 一方、OriginalClassTestをそのままにしておくと、これがテストメンテナンスの問題であることがわかります。ExtractedClassのテストがどこにあるかを見つけるのは少し混乱するでしょう。あなたの第一印象は、それが存在しないということです。量産コードのリファクタリングが多くなると、これは深刻な問題になる可能性があります。 私はTDDが初めてなので、専門家のアドバイスをお願いします。ありがとう!

4
統合テストの名前の選択
単体テストを使用すると、ドメインが非常に小さくなるため、簡単です。私はオセロベのmethodName_conditions_result()スキームを使用しましたが、それは非常に明確でした。 しかし、統合テストでは、非常に長い名前になると思いmethodNameます。代わりに何を入れますか?統合テストクラスに名前を付けるにはどうすればよいですか? 統合テスト名の実際の例は大歓迎です。答えがこれらのテストをよりよく理解するのにも役立つことを願っています。

1
ソフトウェアのテスト方法と開発者の生産性との関係に関する調査はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 ソフトウェアテストプラクティス(単体テストや統合テスト)と開発者の生産性との関係に関する調査はありますか?

3
統合テストを継続的統合(CI)に含める必要がありますか?
Webアプリケーションを開発しており、Hudsonがコンパイル、単体テスト、静的コード分析などの典型的な仕事をしていると仮定します。 ただし、注意が必要なのは、Hudson がアプリケーションサーバーを展開して起動し、統合ジョブを実行してから、以前のジョブが完了したことです。 これは、データベース接続、3番目の部分のアプリケーション接続、ソケットポートのリスニング、環境変数、サーバーの起動失敗の処理など、いくつかの困難なことを意味します。さらに悪いことに、統合テストは統合テストを簡単に破ることができます。 統合テストを継続統合(CI)に含める必要があると思いますか?手動でできますか?または統合テストを簡素化しますか?

3
ユニットテストと統合テストの間のどこに線を引くべきですか?それらは分離すべきですか?
私が取り組んできた小さなMVCフレームワークがあります。コードベースは決して大きくはありませんが、2、3のクラスではありません。私はついに思い切ってテストを書き始めることにしました(はい、私はずっとそれをやっていたはずですが、APIはこれまで非常に不安定でした) とにかく、私の計画は、統合テストなど、テストを非常に簡単にすることです。統合テストの例は、次のようなものに沿って進みます。 偽のHTTP要求オブジェクト-> MVCフレームワーク-> HTTP応答オブジェクト->応答が正しいことを確認 これは状態や特別なツール(ブラウザの自動化など)なしですべて実行できるため、実際には通常の単体テストフレームワーク(私はNUnitを使用)で簡単に実行できます。 さて、大きな質問です。ユニットテストと統合テストのどこに正確に線を引くべきですか?ユニットテストで一度に(可能な限り)1つのクラスのみをテストする必要がありますか?また、統合テストは、ユニットテストプロジェクトと同じテストプロジェクトに配置する必要がありますか?

2
blue-sky / prototypeプロジェクトで最初に単体テストを作成するか統合テストを作成するかを評価する
最近気付いたのは、次のタイプのプロジェクトを実行しているときです。 プロジェクトを始めるとき MVP /プロトタイプの作業 完全に定義されていない機能を追加する 小規模プロジェクトでの作業 参考までに、私は現在、いくつかのコメントとすべての空白を含む、現在〜1k行のコードがあるPythonプロジェクトに取り組んでいます。 私は、コードの最初の書き込みの統合テスト、仕事にそれが非常に簡単に見つけて、その後、それ一度APIは、多少のユニットテストを追加することで、実際に作業を硬化させます。私のmain関数で実行できるテストの種類、いわば、何よりも「エンドツーエンド」です。 これは、APIがかなり急速に変化しているときにユニットテストが本当に煩わしいためです。これは、上記の条件のいずれかまたはほとんどに一致するプロジェクトで作業している場合によくあります。 このアプローチは良いアプローチですか?これらのタイプのプロジェクトの最初に単体テストと統合テストのどちらを開始するかを決定するとき、どの基準を考慮する必要がありますか?APIがより強固になる前に、この種のプロジェクトを単体テストすることの価値を見逃していますか?

2
単体テストと統合テストのコードカバレッジレポートを分けますか、それとも両方のレポートを1つにしますか?
単体テストと統合テストの個別のコードカバレッジレポート、または両方のコードカバレッジレポートが必要ですか? この背後にある考え方は、コードカバレッジにより、コードが可能な限りテストによってカバーされていることを確認できるということです(とにかく、マシンができる限り)。 個別のレポートがあると、単体テストでカバーされなかったこと、統合テストでカバーされなかったことを知るのに便利です。しかし、この方法では、総カバレッジ率を確認できません。

1
OSSプロジェクトの統合テスト-認証でサードパーティを処理する方法?
私の(オープンソースの)趣味プロジェクトの1つは、GitHub、Bitbucketなどからリポジトリのオフラインバックアップを作成するバックアップツールです。 ホスティング事業者のAPIを呼び出してリポジトリのリストを取得し、Git / Mercurial /何でもクローン/リポジトリをローカルコンピュータにプルします。 したがって、認証を使用してGitHub APIを呼び出す統合テストがあります。 (そして、クローン/プル機能が終了すると、おそらくGitHubからリポジトリをクローンするテストがあり、認証も必要になります) 特にこれらの統合テストで使用するユーザーと組織を作成しました。 問題:オープンソースであり、コードがGitHubで公開されているため、ソースコードのどこかにパスワードをハードコードすることはできません。 私が今やっていること テストでは、環境変数からすべてのユーザー名、パスワード、リポジトリ名を取得しています。 次に例を示します。 config.Name = TestHelper.EnvVar("GithubApiTests_Name"); config.Password = TestHelper.EnvVar("GithubApiTests_PW"); (TestHelper.EnvVar環境変数の値を取得し、存在しない場合は例外をスローするヘルパーメソッドです) 次に、これらの環境変数を設定するバッチファイルがあります。 実際のenvironment-variables.batスクリプト()は、ビルドスクリプトでテストを実行する前に呼び出されますが、ソース管理では無視されるため、実際にはリポジトリにありません。 何でソースコントロールであるでenvironment-variables.bat.sampleはなく、偽のパスワードで、同じ環境変数を設定し、: rem copy/rename this file to environment-variables.bat echo Setting environment variables for integration tests... set GithubApiTests_Name=scm-backup-testuser set GithubApiTests_OrgName=scm-backup-testorg set GithubApiTests_PW=not-the-real-password set GithubApiTests_Repo=scm-backup リポジトリを自分のマシンに複製し、このファイルの名前をに変更しenvironment-variables.bat、偽のパスワードを実際のパスワードに置き換えると、すべての統合テストが機能します。 これは継続的インテグレーションでも機能します。私はAppVeyorを使用しており、Web UIでこれらの環境変数を設定できます。 それについて私が嫌いなこと 私はそれがOSSプロジェクトにとって、特にこのプロジェクトにとっては良い解決策ではないと思います: 理論的には、私のプロジェクトの貢献者は、次の方法で統合テストをすぐに実行できます。 …

1
ユニットとインテグレーションのギャップのテスト:小型コンポーネントインテグレーションのユニットインテグレーションテスト
過去数週間、私はテスト方法論のギャップを埋める方法を検討し、検討してきました。簡単に言うと、単体テストは小さすぎ、従来の統合テストは大きすぎます。 頻繁にシナリオがアップになるAとB、両方の使用コンポーネントをC。ただしA、のB要件は少し異なり、についての仮定も少し異なりますC。私が開発者である場合A、どこでどのように私の想定をテストするのCですか? 明らかにAモックされた仮定Cを使用Aした単体テストは、単独でのテストには適していますが、仮定自体はテストしません。 別の可能性は、の単体テストを追加することですC。ただし、これはA開発段階ではありますがC、仮定を進化させてテストを変更するのは非常にA不格好なため、これは理想的ではありません。実際、A開発者はC(たとえば、外部ライブラリ)の単体テストに適切にアクセスできない場合もあります。 これをより具体的な例でフレーム化するには:これがノードアプリケーションであると想定します。 AにB依存しC、(特に)ファイルを読み取り、ファイルの内容をに渡されたオブジェクトに格納しますC。最初Cは、処理するすべてのファイルが小さく、重大なブロックなしで同期的に読み取ることができます。ただし、の開発者Bは、自分のファイルが巨大になりC、非同期読み取りに切り替える必要があることを認識しています。これにより、で散発的な同期バグが発生します。Aこれは、Cファイルを同期的に読み取ることを前提としています。 これは、完全な統合テストから追跡するのが非常に難しいことで有名なタイプのバグであり、統合テストではまったく検出されない可能性があります。またA、Asの前提条件がモックされているため、sの単体テストでは捕捉されません。ただし、「」Aおよび「」のみを実行する「ミニ」統合テストで簡単に検出できますC。 このタイプのテストへの参照はわずかしか見つかりませんでした。小型の統合、コンポーネント統合テスト、ユニット統合テスト。また、正式なTDD単体テストではなく、BDDテストの方向性にも関係しています。 このテストギャップをどのように埋めますか?具体的には、そのようなテストはどこに置くのですか?どのように私はの入力あざけりないAとC「ミニ」統合テストのために?そして、これらのテストと単体テストの間でテストの懸念を分離するためにどれだけの努力を払う必要がありますか?または、テストのギャップを埋めるためのより良い方法はありますか?

4
ダーティデータベースを回避するための統合テスト中のクリーンアップと配置のプラクティス
私はC#でテストをコーディングしていますが、次の構造で解決しました。 try { // ========== // ARRANGE // ========== // Insert into the database all test data I'll need during the test // ========== // ACT // ========== // Do what needs to be tested // ========== // ASSERT // ========== // Check for correct behavior } finally { // …

5
開発テストケース(ユニットおよび開発統合)をQA(テスト)チームと共有しますか?
テストチーム(一部の組織では、いわゆるQAチーム)は、開発チームが(開発チームの)テストケースを彼らと共有する必要があると主張しています。彼らの主張は、開発テストケースがQAテストの出発点であるということです。 開発チームのメンバーとして、私は要求を理解していません。私自身、テスターは要件に基づいてソリューションをテストする必要があります。テストチームを詳細設計(低レベル設計)ドキュメントと共有する必要があるかどうかはわかりません。ただし、詳細設計は共有しています。 私はここでいくつかの投稿を読みました。QAチームは、より良いソリューションとスループットのために、テストケースを開発チームと共有する必要があると述べています。しかし、テストケースをQAテストチームと共有する開発チームはありません。 開発ユニットと統合テストケース、およびテスト結果を共有できれば、QAチームは非常に満足しているようです。

3
非トランザクションデータベースと統合テスト
統合テストで遭遇すると思う1つの問題は、複数のテストが同じデータベースにアクセスすることです。現在、これは問題ではありませんが、同じデータベースにアクセスする複数のアプリケーションが存在することはわかっています。この問題が発生する前に回避する方法を考えているところです。 私がよく見たアイデアはトランザクションを使用することです。起動時にトランザクションを開始してから、ティアダウンでトランザクションをロールバックします。これは、同じデータベーステーブルにアクセスする複数のテストが互いに影響を及ぼさないことを意味します。私の問題は、私の場合、MySQLで使用しているテーブルの85〜95%がトランザクションをサポートしないMyISAMであるということです。 トランザクションをサポートしないストレージエンジンを回避する方法はありますか?それでも、複数のテストが互いに影響を与えずに同じテーブルにアクセスできるようにしますか?私が聞いたところによると、Ruby on Railsテストフレームワークはこのようにトランザクションを使用しますが、どのようにしてこの問題を回避しますか(またはそれらを行いますか)?

2
データベースとCIサーバー
私はCIサーバー(Hudson)を使用していますが、これは陽気にビルド、単体テストを実行、開発環境にデプロイしますが、統合テストを実行したいと思います。 統合テストはデータベースにヒットし、そのデータベースは問題のテストに関連するデータを含むように常に変更されます。しかし、これは問題を引き起こします-データベースが1つのテストのデータでスプラットされていないことを確認し、最初のテストセットが完了する前に、そのデータが2番目のプロジェクトによって上書きされることを確認するにはどうすればよいですか? 私は現在「希望」方法を使用していますが、現時点ではそれほどうまく機能していませんが、CIで設定されている統合テストの数が少ないという事実が主な原因です。 私が見ると、次のオプションがあります。 ローカルの(メモリ内の)テストデータベースインメモリのデータベースがOracleのトリガーやパッケージなどのすべての恐ろしさを処理できるかどうかはわかりませんが、テスト中に価値がないと感じるものはありません。 CIエグゼキューターローカルデータベースこれをセットアップして最新の状態に保つには、かなりの作業が必要になりますが、オプションとしてはまともです(ほとんどの作業は、現在のCIデータベースを最新に保つために既に行われています)。 単一の「統合テスト」エグゼキュータ実装するのが最も簡単なようですが、統合テストがかなり遅れることがあります。 データベース(またはテーブルのセット)のロック 私はいくつかの方法を逃したと確信しています(それらを追加してください)。CIサーバーでデータベースベースの統合テストをどのように実行しますか?どのような問題があり、どのような方法をお勧めしますか?(注:私はHudsonを使用していますが、CIサーバーの回答を受け入れて満足しています。詳細がそうでなくても、確実に移植可能なアイデアです)。 乾杯、 MLK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.