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.

Pytest desencadena AssertionError: {}

Sigo el ex47 en “Learn Python the Hard Way” de Zed Shaw, sin embargo, en el libro está utilizando un software desactualizado (Nose). He convertido su código/mi código a pytest pero estoy teniendo algunos problemas.

def test_room():
    gold = Room("GoldRoom",
    """Esta habitación tiene oro que puedes agarrar.
    Hay una puerta hacia el norte.""")
    # assert_equal(gold.name, "GoldRoom")
    # assert_equal(gold.paths, {})
    assert gold.name, "GoldRoom"
    assert gold.paths, {}

He convertido la función de prueba de Nose assert_equal(a, b) a la equivalente en Pytest: assert a, b. Sin embargo, cuando lo ejecuto, obtengo un error solo para esta prueba en particular. Las otras dos pruebas pasan en el mismo formato. Además, el error se señala en la línea “assert gold.paths, {}”.

>       assert gold.paths, {}
E       AssertionError: {}
E       assert {}
E        +  where {} = <ex47.game.room object="" at="" 0x7fd136193be0="">.paths

Pytest me dice que pasa si cambio “assert gold.paths, {}” a “assert gold.paths == {}”. ¿Es esto un falso positivo? Para mí, se lee igual, estoy afirmando que gold.paths es igual a un diccionario.

¿Alguien puede explicar por qué el símbolo “==” tiene que estar ahí?</ex47.game.room>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El símbolo “==” se utiliza para comparar dos valores en igualdad. En este caso, estás tratando de afirmar que el valor de gold.paths es igual a un diccionario vacío {}. Sin el símbolo “==”, la declaración assert solo verifica si el valor de gold.paths existe y es verdadero, lo cual es cierto en este caso.

    Por lo tanto, cuando usas “assert gold.paths”, básicamente estás verificando si gold.paths existe y no es None o False, lo cual es verdadero para un diccionario vacío. Es por eso que cambiar la declaración assert a “assert gold.paths == {}” soluciona el problema, ya que específicamente verifica si gold.paths es igual a un diccionario vacío.

    En resumen, es importante utilizar el símbolo “==” en las declaraciones assert cuando deseas comparar igualdad, en lugar de simplemente verificar si un valor existe y no es falso.

Comments are closed.