2016-07-27 3 views
2

さまざまなレベルのテスト用にSpecFlowを設定することを検討しています。その中で、どのテストを実行するかをフィルタできます。特定の条件でspecflow仕様をスキップする

たとえば、完全なGUIテストを実行したいとします。ここでは、開発環境でGUIテストの依存関係を構築し、guiで実行された手順を使って@guiタグ付きのすべての仕様を実行します。また、同じスクリプトから、@ smokeというタグの付いたテストだけを実行し、デプロイされた環境に必要な依存関係を設定し、apiで実行されるステップを設定します。

specflowランナーを実行しているときにタグをフィルタすることができますが、テスト実行のコンテキストで各テストがどのように動作するかを変更する必要があります。また、ビルドサーバー上で実行するときに、この動作の変更を単一のconfig /コマンドライン引数で切り替えることも欲しいです。

これまでのところ私の解決策はテストの実行ごとに振る舞いを注入できるように、テストの種類ごとにビルド構成を持ち、configを変換することです。しかし、タグでフィルタリングする正しい方法についてはわかりません。

私はこのようなsomethigを行うことができます:

[BeforeFeature] 
public void CheckCanRun() 
{ 
    if(TestCannotBeRunInThisContext()) 
    { 
     ScenarioContext.Current.Pending(); 
    } 
} 

私はこれが働くだろうと思います(それが機能を実行しないだろう)が、テストでは、まだ私は「場合は厄介だろうこれ、私のテスト結果に出てくるでしょう私のタグで大部分のテストを除外しています。私はこれを行うことができますが、完全に実行されている機能を削除する方法は?

+0

これらのテストを実行しない場合、どのようにテストを実行していますか?組み込みのVSランナーを使用していますか?コマンドラインから?ビルドサーバーで? –

+0

@SamHolder resharperテストランナーを使用した開発中とCIサーバー(異なるビルドレベルで実行される別の構成を使用)の両方で、また可能であれば、デプロイされたサーバーでデプロイメントが正常に行われたことを確認するためのいくつかの仕様... –

答えて

1

要するに、私は、あなたが上で概説したもの以外に、あなたが望むことをするためにとにかくあるとは思わない。

単なる単体テストであれば、テストの実行をどのように除外しますか?

ReSharperのランナーでは、実行したいテストだけでテストセッションを作成します。CIサーバーでは、特定のdllまたは特定のカテゴリでのみテストを実行します。

Specflowはユニットテスト生成ツールです。これは、設定で指定されたフレーバーで単体テストを生成します。ランナは、実行するテストを決定する必要があります。したがって、上記のテストを選択するのと同じ原則が、スペックフローテストに適用されます。

これらをカテゴリに配置し、それらのカテゴリのみを実行するのが最も簡単ですが、それをより細かくプログラムで制御することは実際には適用できません。あなたがして欲しいのは、基本的には「このテストを実行してください。しかし、テストを実行するかどうかを決めることができます。これは本当に意味をなさない」ということです。

+0

ありがとう。あなたが実際に言ったことは、これを達成するための別の方法のアイデアを私に与えます。私は、その時点で適切な情報にアクセスできると仮定して、生成段階では望まないテストを抑制するためのジェネレータプラグインを作成することができます。 –

関連する問題