es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El código de producción general captura las excepciones de aserciones de nUnit que causan que las pruebas fallidas pasen.

Entiendo que las declaraciones de falla de nUnit lanzan una excepción, y es así como los ejecutores de pruebas detectan que ha ocurrido un error. Mi problema es que hay un bloque try-catch general en el código de producción que atrapa estas excepciones de Assert, y el ejecutor de pruebas de Unity piensa que el código se está ejecutando sin ningún problema. He simplificado el código a esto:

[UnityTest]
public IEnumerator End2EndTests_Test_Foo()
{
    try
    {
        Assert.Fail("Algo está mal.");
    }
    catch (Exception)
    {
        UnityEngine.Debug.Log("* Algo salió mal. ¡Me comí esta excepción! yum yum *");
    }

    yield break;
}

Como mencioné, esta prueba pasa en Unity Test Runner. ¿Cuál es el remedio?

Nota 1: No he colocado ninguna afirmación dentro del código de producción. Las afirmaciones están en devoluciones de llamada que son invocadas por el código de producción. Si ocurre alguna excepción en las devoluciones de llamada, el código de producción las atrapa. Así es como las excepciones de las afirmaciones fallidas son capturadas por el código de producción, no por el ejecutor de pruebas.

Nota 2: Algunos antecedentes: El código de producción envía una solicitud a un servidor. Cuando recibe una respuesta, invoca a todos los suscriptores (devoluciones de llamada). Mi código de prueba se ha suscrito al evento OnResponse. La afirmación fallida se encuentra dentro de esa devolución de llamada. El bloque try-catch general se encuentra dentro del código de producción, abarcando la invocación del evento OnResponse.

Nota 3: No quiero poner una declaración catch especial para nUnit en el código de producción y volver a lanzar la excepción. Esa es una solución incorrecta porque el código de producción no debería tener ninguna dependencia de un marco de pruebas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La solución para esta situación es utilizar un enfoque diferente para detectar errores en el código de producción. Una posible solución es crear una excepción personalizada que se lance cuando falle una afirmación, y luego capturar esa excepción en el código de producción en lugar de usar un bloque try-catch general. Esto permitiría al Unity Test Runner detectar el error y fallar la prueba.

    Otra opción es utilizar un marco de pruebas diferente que no dependa de lanzar excepciones para detectar fallos en las pruebas. Algunos ejemplos incluyen MSTest y xUnit.

    Es importante tener en cuenta que el código de producción no debe depender del marco de pruebas, por lo que se debe evitar cualquier solución que implique modificar el código de producción para manejar excepciones de pruebas directamente. En su lugar, el código de pruebas debe diseñarse de manera que permita detectar errores sin interferir con el funcionamiento normal del código de producción.

Comments are closed.