0

アプリケーションに自動統合テストを実装しようとしています。非常に複雑なモンスターです。イメージ ファイルをハード ドライブに保存し、DB 内のイメージ ファイルを参照するため、データベースとファイル システムの一部は状態の一部であると言えます。ソフトウェアが適切に動作するには、これらすべてが一貫した状態である必要があります。

テストの作成に戻る: 関連するテストを実行するには、ファイル システムにいくつかの画像ファイルが必要で、データベースに特定のレコードが入力されている必要があります。これらをすべてリポジトリ内の TestEnvironmentData という別のフォルダに入れ、継続的インテグレーション サーバー (Team City) から取得することを考えましたが、同僚から、このままではリポジトリがいっぱいになるので、継続的インテグレーション サーバーのみの特別なディレクトリとデータベース。テストの成功は、サーバー内のものを手動で管理し、すべてのテストが面倒になる前に初期状態を復元することにかかっているため、私はそれが好きではありません。

このようなアプリの統合テストを作成する必要がある場合、皆さんはどうしますか? 主な目標は、大規模なリファクタリングにアプローチするための自動化されたテスト ハーネスを用意することです。多くのスパゲッティ コードがあり、アプリの現在のアーキテクチャは単体テストがほとんどできないため、最初に統合テストを行うことにしました。

代替アプローチは大歓迎です。

4

2 に答える 2

1

まず、Maven を使用してコードをビルドします。これは ant に似ていますが、Ruby On Rails のように、多くのことで構成ではなく規約に依存しています。これらの規則の 1 つは、標準化されたディレクトリ構造です。

(project)----src----main----(language)
          |      |       \--resources
          |      \--test----(language)
          |              \--resources
          \--target---...

このようなディレクトリ構造を使用すると、アプリケーション リソースとテスト リソースを互いに近くに保ちながら、テスト用にビルドしたり、運用用にビルドしたり、両方をビルドしてテストの実行後にアプリケーション パーツをパッケージ化したりすることが簡単になります。

テスト間のデータベースのリセットに関する限り、その方法は使用している DBMS に大きく依存します。たとえば、MySQL を使用している場合、必要な方法でテスト データを取得し、ファイルに mysqldump を実行して、テストの前にロードするのは非常に簡単です。他の DBMS では、テーブルを削除して再作成し、データを再ロードするか、開始点として別のテーブルを作成し、CREATE/SELECT SQL ステートメントを使用して毎回複製する必要があります

「テスト間でデータベースをリセットする」ステップを回避する信頼できる方法は実際にはありません。

于 2012-04-12T18:01:29.170 に答える
1

継続的インテグレーション サーバーをセットアップするときは、開発者の再現性が重要です。過去 3 人の雇用主のために 1 つをセットアップしましたが、成功の鍵は、CI サーバーと同じ結果を得るために、開発者が開発システムから同じテストを実行できることであることがわかりました。

これを行う最も簡単な方法は、テスト アーティファクトをソース管理にチェックインすることですが、ビルド ステップの 1 つでそれらをコピーするドロップボックスまたはネットワーク共有を使用することもできます。

.Net ソリューションの場合、Visual Studio のビルド プロセスを最も簡単に複製し、同じバイナリ/デプロイ可能ファイルを取得できるため、私は常に MsBuild を使用してきました。過去にテストを繰り返し実行できるようにデータベースの同期を維持するために、MbUnit テスト フレームワークと [Rollback] 属性を使用しました。これは、テストで発生した Sql Server への変更をロールバックするためです。Nunit もこの属性を持っていると思います。

CI サーバーは、既存の機能を壊すコードを見つけるのに優れていますが、開発者が自分のマシンでエラーを再現できない限り、しばらくの間 CI サーバーを信頼しません。

于 2012-04-12T19:07:58.360 に答える