2012-09-25 7 views
10

Ho diversi file di funzionalità con alcuni scenari. Devo ignorare diversi scenari, o funzionalità, contrassegnati con alcuni @tag a seconda di alcune condizioni. Ho letto specflow documentation ma non ho trovato nulla che possa essere utile per la mia soluzione. Voglio usare qualcosa comeCome ignorare a livello di programmazione alcuni test di accettazione utilizzando TechTalk.SpecFlow e C#?

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

Inoltre ho provato in modo dinamico aggiungere o rimuovere i tag

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

, ma non ha funzionato. Forse c'è un altro modo per aggiungere o rimuovere dinamicamente i tag? O alcuni metodi nella classe ScenarioContext che ignoreranno lo scenario corrente?

risposta

21

di avere almeno 3 opzioni:

  1. Configure Specflow per il trattamento di passi in attesa di ignorare con missingOrPendingStepsOutcome="Ignore" allora si può scrivere:

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

    È forse non ciò che si vuole a seconda della requisiti per le fasi in sospeso.

  2. Utilizzare il framework di test dell'unità integrato nel metodo per ignorare il test durante il runtime. Quindi se stai utilizzando, ad es. NUnit poi con la Assert.Ignore():

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

    penso che questo sia il/soluzione più semplice più pulita.

  3. O se volete farlo un modo quadro indipendente dal test e non avete paura di pasticciare con interni Specflow quindi è possibile utilizzare l'interfaccia IUnitTestRuntimeProvider:

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

    Ciò funzionerà anche se si cambia unit testprovider ma non è garantito che questa API non interrompa la funzionalità.

Problemi correlati