4

私はすでにいくつかの解決策を探すために多くの時間を費やしていますが、私は無力です!

MVCアプリケーションを入手し、CoypuとSpecFlowを使用してビューの「統合テスト」を実行しようとしています。しかし、このためにIISサーバーをどのように管理する必要があるのか​​わかりません。サーバーを実際に実行し(テストの最初の開始)、各シナリオの後に空にされた(そしてバックグラウンドで埋められた)特別な「テスト」DB(たとえばメモリ内のRavenDB)をサーバーに使用させる方法はありますか?

これを行うためのより良いまたはより簡単な方法はありますか?

4

2 に答える 2

0

すでに SpecFlow を使用しているため、SpecRun ( http://www.specrun.com/ ) を参照してください。

これは、SpecFlow テスト用に設計されたテスト ランナーであり、テスト エクスプローラーでのテスト名の書式設定の改善などの小さな利便性から、複数のターゲットおよび構成ファイルの変換に対して同じ SpecFlow テストを実行することをサポートするなど、あらゆる種類の機能を追加します。

SpecRun では、VS の .runsettings ファイルと同様に、テストの実行に使用される「プロファイル」を定義します。そこでは、次を指定できます。

<DeploymentTransformation>
  <Steps>
      <IISExpress webAppFolder="..\..\MyProject.Web" port="5555"/>
  </Steps>
</DeploymentTransformation>

SpecRun は、テストを実行する前に、その Web サイトを実行する IISExpress インスタンスを起動します。同じ場所で、(標準の App.Config 変換を使用して) カスタム展開変換を設定し、アプリの Web.config の接続文字列をオーバーライドして、インメモリ DB を指すようにすることもできます。

SpecRun に関して私が経験した唯一の問題は、ドキュメンテーションが良くないことです。多くのビデオ デモンストレーションがありますが、いくつかのチュートリアルが書かれている方がよいでしょう。それが StackOverflow の目的だと思います。

于 2014-05-06T13:13:23.877 に答える
0

私もこれにはかなり慣れていないので、答えを少し塩で取ってください。しかし、他の誰も答えていないので...

サーバーを実際に実行する方法はありますか (テストの最初の開始)...

コマンド ラインから呼び出すことができる IIS Express を使用できます。[BeforeTestRun]テストを実行する前に ( SpecFlowの属性を使用して実行できると思います) System.Diagnostics.Process、.

実際のコマンドラインは次のようになります。

iisexpress.exe /path:c:\iisexpress\<your-site-published-to-filepath> /port:<anyport> /clr:v2.0

...そして、サーバーが特別な「テスト」DB(たとえば、メモリ内のRavenDBなど)を各シナリオの後に空にする(そしてバックグラウンド中にいっぱいにする)を使用するようにします。

特別なテスト DB を使用するには、データ アクセスがどのように機能しているかに依存すると思います。インメモリ DB をかなり簡単にスワップできる場合は、それができると思います。私の理解では、統合テストは可能な限り本番環境に近づける必要があるため、可能であれば本番環境で使用しているのと同じ DBMS を使用してください。

私がやっていることは、テストが実行されるたびに、prod DB の既知のバックアップからテスト DB にデータを復元することです。Processテストを実行する前に、これを command-line/ 経由で再度呼び出すことができます。私の DB の場合、これはかなり小さなデータセットであり、テストに関連するテーブルのみを復元できるため、このオーバーヘッドは統合テストにはそれほど大きくありません。(ただし、モック リポジトリやメモリ内データを使用する可能性がある単体テストでは受け入れられません。)

于 2012-06-07T10:26:26.947 に答える