2012-04-20 11 views
4

私はすでにいくつかの解決策でグーグルで多くの時間を費やしていますが、私は無力です!CoypuとSpecFlowを使用してIISサーバを実行

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

これを行うには、より簡単な方法がありますか?

+0

あなたは何をやったのですか?私もこの問題を抱えています。 – levininja

答えて

0

私もこれにかなり新しいですので、塩ひとつまみと答えを取る、それ以外誰もが答えているように...

は、実際にサーバ(最初のスタートを実行する方法はあります...

コマンドラインから呼び出すことのできるIIS Expressを使用できます。あなたはSystem.Diagnostics.Process経由の呼び出しで、テストが実行される前にあなたのウェブサイトをスピンアップすることができます(これはSpecFlowの[BeforeTestRun]属性で行うことができます)。

実際のコマンドラインは、たとえば次のようなものです。

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

...と特別な「テスト」DB(例えばメモリ内RavenDB)は、各シナリオの後に空に(とバックグラウンドの間に充填された)サーバを利用します。

特別なテストDBを使用するには、データアクセスの仕方によって異なります。メモリ内のDBをかなり簡単にスワップすることができれば、それを実行できると思います。私の理解では、統合テストはできるだけプロダクション環境に近いものでなければならないが、可能であれば、プロダクション環境で使用しているものと同じDBMSを使用することが望ましい。

私がやっていることは、テストを実行するたびにprod DBの既知のバックアップからテストDBにデータを復元することだけです。テストを実行する前に、私は再びコマンドライン/ Processでこれを呼び出すことができます。私のDBではかなり小さいデータセットであり、テストに関連するテーブルだけを復元することができるので、このオーバーヘッドは統合テストにはあまりにも厳しいものではありません。 (単体テストでは、モックリポジトリやメモリ内のデータがあるかもしれません。)

+0

"iisexpress.exeは、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。 – levininja

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のためのものだと思う。

関連する問題