2012-09-25 19 views
10

いくつかのシナリオでいくつかの機能ファイルがあります。いくつかの状況に応じて、@tagとマークされたいくつかのシナリオや機能を無視する必要があります。私はspecflow documentationを読んだことがありますが、私の解決に役立つものが見つかりませんでした。私はTechTalk.SpecFlowとC#を使用していくつかの受け入れテストをプログラムで無視する方法

[BeforeScenario("sometag")] 
public static void BeforeScenario() 
{ 
    if(IgnoreTests) 
    { 
     // This is the hot spot 
     Scenario.DoSomethingToIgnoreScenarioIfConditionButRunScenarioIfConditionFalse(); 
    }   
} 

のようなものも、私は動的に

[BeforeScenario("sometag")] 
public static void BeforeScenario() 
{ 
    if(IgnoreTests) 
    { 
     ScenarioContext.Current.ScenarioInfo.Tags.ToList().Add("ignore"); 
    }   
} 

タグを追加または削除を試みたが、それはうまくいきませんでしたを使用します。おそらく、タグを動的に追加または削除する他の方法がありますか?または、現在のシナリオを無視するクラス ScenarioContextのいくつかの方法?

答えて

21

あなたは、少なくとも3つのオプションがあります:それはあなたに応じて、何をしたいかもしれない

if(IgnoreTests) 
{ 
    ScenarioContext.Current.Pending(); 
} 

  1. Configure Specflow missingOrPendingStepsOutcome="Ignore"その後、あなたが書くことができると無視して、保留中のステップを治療するために保留中のステップの要件。

  2. ユニットテストフレームワークの組み込みメソッドを使用して、実行時にテストを無視します。したがって、たとえばあなたが使用している場合。 NUnitのは、Assert.Ignore()で:

    if(IgnoreTests) 
    { 
        Assert.Ignore(); 
    } 
    

    私はこれが最もきれい/最も簡単な解決策だと思います。

  3. それともあなたはそれをテストフレームワークに依存しない方法で行いたいとあなたはSpecflowの内部を台無しに恐れていないならば、あなたはIUnitTestRuntimeProviderインタフェースを使用することができます。これは、あなたがあなたを変更しても動作します

    if (IgnoreTests) 
    { 
        var unitTestRuntimeProvider = (IUnitTestRuntimeProvider) 
        ScenarioContext.Current 
         .GetBindingInstance((typeof (IUnitTestRuntimeProvider))); 
        unitTestRuntimeProvider.TestIgnore("ignored"); 
    } 
    

    をunit testproviderを使用していますが、このAPIがこの機能を破らないことは保証されていません。

関連する問題