2010-08-27 19 views
31

¿Hay algún estado global en algún lugar donde pueda acceder al nombre de la prueba que se está ejecutando actualmente?¿Cómo acceder al nombre de la prueba NUnit mediante programación?

Tengo pruebas que muestran archivos en un directorio y los vuelvo a leer. Me gustaría que cada prueba creara un directorio para jugar y luego limpiarlo solo, y no quiero insertar ese nombre en (Tendría que hacerlo único, y luego asegurarme de que cada prueba lo mantenga único; ew). Podría usar un GUID, pero me gustaría que los métodos de ayuda puedan suponer que "este es el lugar donde deben almacenarse los archivos de prueba" sin tener que presionar ese GUID hacia ellos. Una vez más, esta barrena para un estado global en alguna parte.

Básicamente, quiero una llamada como TestRunner.Current.CurrentTest.Name. ¿Existe tal cosa?

Respuesta

22

no he actualizado a 2.5.7 sin embargo, a mí mismo, sino que incluye una clase TestContext que parece ofrecer justo lo que está buscando: http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7

+0

Esto funciona genial. Uso un Regex para eliminar los caracteres que no funcionan en un nombre de directorio, y todo está bien. ¡Gracias! – TALlama

+0

Para usarlo en el código, obtenga el TestContext llamando al método estático CurrentContext. Entonces, por ejemplo: TestContext.CurrentContext.Test.Name –

4

Suponiendo un método por Prueba, en su código NUnit, puede usar reflection para obtener el nombre del método de stacktrace.

Si se escribe un método de ayuda en el código NUnit llamado por otros métodos para hacer esto el registro de archivos, puede utilizar esta sintaxis para comprobar la método anterior:

string MethodName = new StackFrame(1).GetMethod().Name; 

Ver las respuestas a question 44153, "Can you use reflection to find the name of the currently executing method?" para más detalles.

+0

Esto no manejará los métodos [TestCase] ​​que se invocan varias veces, pero está lo suficientemente cerca como para obtener el representante. – TALlama

25

(Suponiendo C#)

NUnit.Framework.TestContext.CurrentContext.Test.Name 

o

NUnit.Framework.TestContext.CurrentContext.Test.FullName 
+0

Esto fue sugerido originalmente para usar this.GetType(). ToString() Si era flojo; sin embargo, esto no funciona para las pruebas controladas por TestCaseSource, debe usar una de las dos sobrecargas de TestContext para trabajar en todos los escenarios. – aolszowka

Cuestiones relacionadas