2012-02-01 23 views
6

Vorrei registrare alcune informazioni contestuali quando i test falliscono (come catturare schermate). Esiste un punto di estensibilità nel quadro NUnit in cui posso farlo? Idealmente sarebbe:Asserzioni di cattura in NUnit

[TearDown] 
    public void Down(AssertionException ex) {} 

ma non ce l'abbiamo. Ho cercato di creare un componente aggiuntivo, ma non so come registrare in fase di esecuzione:

[NUnitAddin] 
public class UITestCase : TestCaseBase, NUnit.Core.EventListener, NUnit.Core.Extensibility.IAddin { 
    ............. 
    public void UnhandledException(Exception exception){} 

    public bool Install(NUnit.Core.Extensibility.IExtensionHost host) { 
     IExtensionPoint listeners = host.GetExtensionPoint("EventListeners"); 
     listeners.Install(this); 
     return true; 
    } 

}

UITestCase è la mia classe di base per tutti i test dell'interfaccia utente. Il metodo Install() non viene chiamato. Qualsiasi consiglio sarebbe apprezzato.

Aggiornamento: per un componente aggiuntivo per essere registrati i test devono correre con NUnit corridore (nel mio caso è stato TestDriven.Net plug-in per VS) e EventListener membri sono chiamati ottenere correttamente. Il problema è che tutti hanno chiamato dopo i metodi TearDown/TestFixtureTearDown (il mio contesto è stato perso).

cercato di utilizzare TestContext.CurrentContext.Result nel mio tearDown ma l'accesso sia State o Status proprietà tiri NullReferenceException :(

risposta

2

Dopo l'aggiornamento a NUnit 2.6 TestContext.CurrentContext ha iniziato a funzionare come previsto.

0

Penso che si possa utilizzare try cattura all'interno del vostro metodo di prova per la cattura di eccezione e poi fare qualche azione personalizzato come catturare screenshot all'interno cattura.

+0

Oh no. Quando hai qualche migliaio di test non è un'opzione. – UserControl

+0

Puoi dirmi se si tratta di un test guidato dai dati o di migliaia di casi di test diversi. –

2

penso che l'approccio IAddin ha il più promettente, anche se i EventListeners potrebbero non dal punto di estensione appropriata per le vostre esigenze. hai provato i TestCaseBuilders o TestDecorators estensioni?

Per esempio, la documentazione TestDecorators afferma:

Scopo

TestDecorators sono in grado di modificare un test dopo che è stato costruito .

Extension Point

Addins utilizzano l'host per accedere a questo punto di estensione per nome:

IExtensionPoint testDecorators = host.GetExtensionPoint ( "TestDecorators"); Interfaccia

L'oggetto di estensione passato per l'installazione deve implementare l'interfaccia ITestDecorator:

public interface ITestDecorator  
{  
    Test Decorate(Test test, MemberInfo member); 
} 

Il metodo Decorare può fare diverse cose, a seconda di ciò di cui ha bisogno per compiere: prova non modificato

  1. Return
  2. Modificare le proprietà dell'oggetto test e restituirlo
  3. Sostituire test con un altro ob ject, scartando l'originale o aggregandolo nel nuovo test.

Che suona come un buon posto per provare avvolgendo il test con codice personalizzato.

+0

Grazie, ma non vedo come possa essere d'aiuto. Guardate i membri di NUnit.Core.Test e non vedete punti appropriati per ottenere il risultato del test :( – UserControl

3

Se la tua intenzione è quella di eseguire test della tua applicazione in azione, NUnit non è la scelta migliore, semplicemente non è stata pensata per essere utilizzata in questo modo. NUnit è per test di unità, non test di integrazione, che testerebbe il modo in cui l'interfaccia utente si integra con la logica e i dati. Quando i test unitari sono in esecuzione (compresi quelli in nunit), non viene catturato alcuno screenshot: il test runner indirizza l'output a un file di log che contiene tutto ciò che si vorrebbe sapere sul test, incluse le eccezioni.

Se si sta tentando di eseguire test dell'interfaccia utente, si consiglia di eseguire Watin per i test WebApp e White per i test dell'app WPF/Winforms.

+1

C'è anche l'interfaccia utente codificata, che è in-the-box con VS2010 Premium/Ultimate. –

+0

I do UI testing with Selenium che genera NUnit codice C# compatibile. Comunque quello che voglio è l'agnostico del framework. Devo solo catturare i fallimenti del test. Non è un grosso problema specialmente quando NUnit ha i mezzi per farlo (punti di estensione e TestContext). – UserControl