Pregunta

Me gustaría poder agregar un "mensaje" a una prueba unitaria, de modo que realmente aparezca dentro del archivo TestResult.xml generado por NUnit.Por ejemplo, esto se genera actualmente:

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

Me gustaría poder tener un atributo adicional (o nodo según sea el caso), como por ejemplo:

<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 defina de alguna manera dentro del propio método de prueba (en mi caso, generado en tiempo de ejecución).¿Hay alguna propiedad en algún lugar que me falta para poder hacer algo como esto?

¿Fue útil?

Solución

Es posible que esto no entienda el punto, pero ¿qué tal si nombramos las pruebas para que indiquen lo que prueban? Entonces es posible que ni siquiera necesites el mensaje.

Si resulta absolutamente necesario, creo que necesitará producir su propio testrunner que (fuera de mi cabeza) lea un atributo adicional del TestCase y lo adjunte a la salida.

Otros consejos

En las versiones recientes de NUnit puedes hacer:

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

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

No veo nada disponible en tiempo de ejecución, pero hay un par de características que quizás quieras investigar:el Descripción atributo y el Propiedad El atributo ambos agregan texto al archivo de salida XML.Desafortunadamente, ambos están definidos en tiempo de compilación.

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

Cada una de mis pruebas se hereda de una clase de base de pruebas.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 que las dos funciones inferiores escriben cualquier mensaje o error en dicho TestContext.Esto también funcionará bien con pruebas paralizables.

Luego 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
    }
}

Ahora puede ver los resultados en la salida (Visual Studio) y en TestResult.xml usando NUnit Console Runner.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top