2008-09-04 8 views
5

Me gustaría poder agregar un "mensaje" a una prueba de unidad, de modo que aparezca realmente en el archivo TestResult.xml generado por NUnit. Por ejemplo, esto está actualmente generado:Agregar más información al archivo TestResult.xml de NUnit

<results> 
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" /> 
</results> 

me gustaría ser capaz de tener un atributo adicional (o nodo como puede ser el caso), tales como:

<results> 
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." /> 
</results> 

La idea es que El "mensaje" anterior se definiría de alguna manera dentro del mismo método de prueba (en mi caso, generado en tiempo de ejecución). ¿Hay alguna propiedad en alguna parte que me haga falta para poder hacer algo como esto?

Respuesta

2

Esto puede estar perdiendo sentido, pero ¿qué le parece nombrar las pruebas para que indiquen lo que prueban? Entonces, es posible que ni siquiera necesite el mensaje.

Si resulta ser absolutamente necesario, creo que tendrá que producir su propio testrunner que (fuera de mi cabeza) leer un atributo adicional de la TestCase y adjuntarlo a la salida.

+0

Has confirmado que o necesitaba hacer algo de magia de reflexión y crear dinámicamente y nombrar pruebas en tiempo de ejecución, o que tenía que crear un corredor de pruebas personalizado. –

+0

No estás totalmente fuera de la base. Sin embargo, las condiciones que se están probando y que deseo agregar a TestResult.xml generalmente se desconocen hasta el tiempo de ejecución. Ahora mismo simplemente Console.WriteLine them. Probablemente, estas pruebas se denominen "corredores de prueba", donde solo se afirman algunos valores de estado final. Supongo que a lo largo de estas mismas líneas podría crear dinámicamente y nombrar estos métodos de prueba usando la reflexión, pero creo que eso está empezando a ir por la borda.:-) Sin embargo, continuaré investigando creando un TestRunner mientras tanto. –

0

No puedo ver nada disponible en tiempo de ejecución, pero hay algunas características que puede querer investigar: el atributo Description y el atributo Property ambos agregan texto al archivo de salida XML. Desafortunadamente, ambos están definidos en tiempo de compilación.

5

En la reciente NUnit los estrenos de los que puede hacer:

Assert.AreEqual(250.00, destination.Balance, "some message here"); 

Donde "Algunos mensaje aquí" puede ser un mensaje constante o un mensaje generado en tiempo de ejecución y se almacena en una variable de cadena. Sin embargo, estos mensajes solo aparecerán en el resultado si la afirmación falla. Por lo general, sin embargo, solo necesita información sobre las pruebas fallidas, por lo que recomiendo construir una cadena agregando cada mensaje anterior y luego usar esa variable de cadena como el mensaje en todas sus afirmaciones. Esto le permite obtener toda la información que necesita de las pruebas fallidas.

+0

¡Fantástico, eso es exactamente lo que estaba buscando! –

0

Puede usar TestContext para escribir fácilmente cualquier mensaje que desee. Así es como estoy configurado.

Cada una de mis pruebas se hereda de una clase testbase. Esto elimina el código redundante.

[TestFixture] 
public class TestBase 
{ 

    public IWebDriver driver; 

    //[OneTimeSetUp] and [OneTimeTearDown] go here if needed 

    [SetUp] 
    public void Setup(){ 
     driver = Shortcuts.SetDriver("my browser"); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     driver.Quit(); 
     Comment("@Result: " + TestContext.CurrentContext.Result.Outcome.ToString()); 
    } 

    public void Comment(string _comment) 
    { 
     TestContext.Out.WriteLine(_comment); 
    } 
    public void Error(string _error) 
    { 
     TestContext.Error.WriteLine(_error); 
    } 

} 

Puede ver las dos funciones de abajo escribir cualquier mensaje o error en dicho TestContext. Esto funcionará muy bien con pruebas parallizables también.

Puedo usar esa clase principal para configurar mis pruebas y escribir en mi consola.

//Role Management 
public class RoleManagementTests : TestBase 
{ 
    [TestCase] 
    public void RoleManagement_7777_1() 
    { 
     Comment("Expected: User has the ability to view all roles in the system."); 
     //Test goes here 
    } 
} 

ya se puede ver el resultado en la salida (Visual Studio) y en el TestResult.xml usando NUnit consola Runner.

Cuestiones relacionadas