Saltar al contenido

¿Cómo implementar el mensaje Assert descriptivo de XUnit?

Solución:

Utilice las sugerencias proporcionadas en el enlace. Como afirmaciones fluidas o crea tu propia afirmación que envuelva el Assert.True or Assert.False que se quedaron con sus sobrecargas de mensajes. Se mencionó más abajo

Cita

Puede proporcionar mensajes a Assert.True y .False. Si simplemente no puede vivir sin mensajes (y se niega a usar una afirmación diferente), siempre puede recurrir a:

Assert.True(number == 2, "This is my message");

Cita:

Si realmente desea tener mensajes, puede agregar Fluent Assertions o tal vez xbehave a sus proyectos de prueba y usar su sintaxis. Fluent Assertions incluso arroja excepciones de xunit.net si encuentra su presencia.

Yo estaba teniendo el mismo problema. Tengo una prueba que extrae datos de dos API web y luego compara y afirma varias cosas sobre el contenido. Comencé a usar afirmaciones estándar de XUnit como:

Assert.Equal(HttpStatusCode.OK, response1.StatusCode);
Assert.Equal(HttpStatusCode.OK, response2.StatusCode);

Pero aunque esto da un mensaje útil de que se ha devuelto un 404, no queda claro en los registros de nuestro servidor de compilación / CI qué servicio causó el mensaje de error.

Terminé agregando mi propia afirmación para dar contexto:

public class MyEqualException : Xunit.Sdk.EqualException
{
    public MyEqualException(object expected, object actual, string userMessage)
        : base(expected, actual)
    {
        UserMessage = userMessage;
    }

    public override string Message => UserMessage + "n" + base.Message;
}

public static class AssertX
{
    /// <summary>
    /// Verifies that two objects are equal, using a default comparer.
    /// </summary>
    /// <typeparam name="T">The type of the objects to be compared</typeparam>
    /// <param name="expected">The expected value</param>
    /// <param name="actual">The value to be compared against</param>
    /// <param name="userMessage">Message to show in the error</param>
    /// <exception cref="MyEqualException">Thrown when the objects are not equal</exception>
    public static void Equal<T>(T expected, T actual, string userMessage)
    {
        bool areEqual;

        if (expected == null || actual == null)
        {
            // If either null, equal only if both null
            areEqual = (expected == null && actual == null);
        }
        else
        {
            // expected is not null - so safe to call .Equals()
            areEqual = expected.Equals(actual);
        }

        if (!areEqual)
        {
            throw new MyEqualException(expected, actual, userMessage);
        }
    }
}

Entonces puedo hacer las mismas afirmaciones que:

AssertX.Equal(HttpStatusCode.OK, response1.StatusCode, $"Fetching {Uri1}");
AssertX.Equal(HttpStatusCode.OK, response2.StatusCode, $"Fetching {Uri2}");

y el registro de errores da lo real, esperado y antepone mi mensaje sobre cuál webapi fue el culpable.

Me doy cuenta de que llego tarde para responder, pero pensé que esto podría ayudar a otros a buscar una solución práctica que no tenga tiempo para instalar / aprender otro marco de prueba solo para obtener información útil de las fallas de prueba.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *