0

私は自分のアプリケーションの自動統合テストを実装しようとしています。それは非常に複雑なモンスターです。そのデータベースとファイルシステムの一部は、ハードディスクのイメージファイルとDB内のイメージファイルへの参照を保存するため、その状態の一部であると言えるでしょう。ソフトウェアは、一貫性のある状態で、すべて正常に動作する必要があります。継続的インテグレーション環境における統合テスト:データベースとファイルシステムの状態

筆記テストに戻る:関連するテストを実行するには、ファイルシステムにイメージファイルがいくつか必要です。私はリポジトリのTestEnvironmentDataという別のフォルダにこれらのすべてを置いて、Continuous Integration Server(Team City)からそれらを取得することを考えましたが、同僚はリポジトリがそのまま完全であり、特別なディレクトリ、およびデータベースを含むことができます。テストが成功するかどうかは、手動でサーバに手を加えることによって決まり、すべてのテストが面倒になる前に初期状態に戻すので、私はそれが気に入らない。

あなたはこのようなアプリの統合テストを書く必要があるときはどうしますか?主な目的は、大規模なリファクタリングにアプローチする自動テストハーネスの使用です。スパゲティコードがたくさんあり、現在のアーキテクチャは単体テスト可能ではないので、最初に統合テストを決めました。

いずれの代替方法も歓迎します。

答えて

1

開発者の再現性は、Continuous Integrations Serverを設定する際に重要です。私は最後の3人の雇用主のために1つを設定しました。私は、開発者がCIサーバーと同じ結果を得るためにdevシステムから同じテストを実行できることが成功の鍵であることを発見しました。

これを行う最も簡単な方法は、テスト成果物をソース管理にチェックインすることですが、作成手順の1つでコピーしたDropboxまたはネットワーク共有を使用することもできます。

.Netソリューションの場合、私はいつもMsBuildを使用しています。これは、Visual Studioのビルドプロセスを最も容易に複製し、同じバイナリ/デプロイメントを取得できるからです。過去にテストを再現できるようにデータベースを同期させておくために、私はMbUnitテストフレームワークと[ロールバック]属性を使って、テストで起こったSql Serverへの変更をロールバックしました。私はNunitにもこの属性があると信じています。

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

+0

+1:NUnitが本当にそれを行うことができれば、それは本当の人生保護人です。確かめます。別の.NETの人から読んでうれしい! –

1

まず、Mavenを使用してコードを作成します。それはアリのようですが、Ruby On Railsのように、多くのものの設定ではなく、コンベンションに依存しています。これらの規則の一つは、標準化されたディレクトリ構造である。このようなディレクトリ構造を使用して

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

は互いに近接してアプリケーションのリソースとテストリソースを維持することが容易になり、それでもテストのために構築したり、生産のために構築することができます両方をビルドするだけでテストを実行した後、アプリケーションの部分をパッケージ化するだけです。

テスト間でデータベースをリセットする限り、どのように使用するかは、使用しているDBMSに大きく依存します。たとえば、MySQLを使用している場合は、テストデータを必要な方法で取得し、テストの前にロードしたファイルにmysqldumpを実行するのは非常に簡単です。他のDBMSでは、テーブルを削除して再作成したり、データをリロードしたり、開始ポイントとuse a CREATE/SELECT sql statement to duplicate it each timeに別のテーブルを作成する必要があります。

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

+0

私は.NET + SQLExpress + Team Cityを使用していますので、自分の慣習を定義することができます。それは問題じゃない。とにかく、リソースディレクトリの下にテスト環境を構築するために必要なものがすべてあるようですね。したがって、すべてがソース管理にあります。私の同僚はそれに反対しているので、私はパラメータからテストデータの場所を受け取り、それを使ってテスト環境を構築するスクリプト(Powershellの多分)を書いていると思います。そうすれば、いったんテストデータをどこかに置くと、そこにビルドスクリプトを指し示すことになります。 –

+0

私の同僚は、テストデータをソース管理下に置くというオプションを私に恣意的に否定しているわけではありません(100%)。理由は、サーバーにスペースがないことです(OK、彼らはより多くのスペースを買うことができました、安価な野郎:P)が、ほとんどの場合、私たちのテストデータは大きいです。私たちは高解像度のマルチフレーム画像を扱います。最も基本的なデータベースは約10MBです。ソース管理下のいくつかの異なる環境がすぐにすべてのレポスペースを食いつぶすでしょう... –

+1

これは、そのような重要なアーキテクチャ上の決定をする非常に悪い理由です。私はまたそれがあなたのコントロールから外れていることを認識します。たぶん、.sqlファイルを圧縮して保存することをお勧めします(かなり圧縮します)。あなたはツールでそれらを比較する能力を失うだろうが、少なくともそれはソフトウェアでバージョン管理されるが、それは不可欠である。 –

関連する問題