6.3. Prueba unitaria
Un caso de prueba expresa los requisitos para un programa, de una manera que se puede verificar automáticamente. Específicamente, una prueba afirma algo sobre el estado del programa en un punto particular en su ejecución. Una prueba unitaria es una automática Procedimiento utilizado para validar que las unidades individuales de código funcionan correctamente. Una función es una forma de una unidad. Una colección de estas pruebas unitarias se llama suite de prueba .
Anteriormente hemos sugerido que es una buena idea escribir primero comentarios sobre lo que se supone que debe hacer su código, antes de escribir el código. Es una idea aún mejor escribir algunos casos de prueba antes de escribir un programa.
Hay varias razones por las que es un buen hábito escribir casos de prueba.
Antes de escribir código, tenemos en mente lo que debería hacer, pero esos pensamientos pueden ser un poco vagos. Escribir casos de prueba nos obliga a ser más concretos sobre lo que debería suceder.
A medida que escribimos el código, los casos de prueba pueden proporcionar comentarios automatizados. En realidad, ha sido el beneficiario de tales comentarios automatizados a través de casos de prueba a lo largo de este libro en algunas de las ventanas de Activecode y casi todos los ejercicios. Escribimos el código para esos casos de prueba, pero lo mantuvimos oculto, para no confundirlo y también evitar regalar las respuestas. Puede obtener algunos de los mismos beneficios al escribir sus propios casos de prueba.
En proyectos de software más grandes, el conjunto de casos de prueba se puede ejecutar cada vez que se realiza un cambio en la base del código. Pruebas unitarias verifique que los pequeños bits de código se implementen correctamente.
Una forma de implementar pruebas unitarias en Python es con assert
.
Siguiendo la palabra afirmar que habrá una expresión de Python.
Si esa expresión se evalúa al booleano
False
, entonces el intérprete aumentará un error de tiempo de ejecución.Si la expresión evalúa a
True
, entonces nada sucede y la ejecución pasa a la siguiente línea de código.
Eche un vistazo a la forma en que Afirmar se usa en el siguiente código.
>>assert type(9//5) == int
>>assert type(9.0//5) == int
>>>
Error
AssertionError: en la línea 2
Descripción
Un error de afirmación ocurre cuando Python encuentra una declaración de afirmación. Python evalúa la expresión a la derecha de la palabra afirmar; Si esa expresión es verdadera, todo está bien y el programa continúa. Si la expresión es falsa, Python plantea un error y se detiene.
Para arreglar
Verifique la expresión a la derecha de afirmar. La expresión es falsa y deberá determinar por qué es así. Es posible que simplemente desee imprimir las partes individuales de la expresión para comprender por qué se está evaluando a False.
Explicación:
En el código anterior,
establecemos explícitamente algunos supuestos naturales sobre cómo la
división truncada podría funcionar en Python.
Resulta que el segundo asumio está mal: 9.0//5
produce 2.0
, un valor de punto flotante!
El intérprete de Python no
hace cumplir las restricciones sobre los tipos de datos de objetos que
pueden estar vinculados a particular
variables; Sin embargo, la comprobación de tipos podría alertarnos de
que algo ha salido mal en la ejecución de nuestro programa. Si somos
asumiendo eso x
es una lista, pero en realidad es un entero, luego en algún momento más adelante en la ejecución del programa,
Probablemente habrá un error. Podemos agregar assert
declaraciones que harán que un error se marque antes
que más tarde, lo que podría hacer que sea mucho más fácil depurar.
Comprueba tu comprensión
Cuando assert x==y
se ejecuta e x e y tienen los mismos valores, ¿qué sucederá?
RESPUESTA: D
6.3.1. assert
con for
loops
¿Por qué alguna vez querrías escribir una línea de código que nunca pueda calcular nada útil para ti, pero a veces causa? ¿Un error de tiempo de ejecución? Por todas las razones que describimos anteriormente sobre el valor de las pruebas automatizadas. Quieres una prueba que Alertará que usted de que alguna condición que asumió que era cierto no es cierto. Es mucho mejor ser alertado para ese hecho de inmediato que tener algún resultado inesperado mucho más tarde en la ejecución de su programa, que tendrá Problemas para trazar al lugar donde tuvo un error en su código.
¿Por qué no assert
imprime algo que dice que la prueba pasó? La razón es que no quieres
desordenar
Sube su ventana de salida con los resultados de las pruebas
automatizadas que pasan. Solo quieres saber cuándo una de tus pruebas
falla. En proyectos más grandes, se utilizan otros arneses de prueba en
lugar de assert
, como el pitón unittest
módulo. Esos proporcionan algunas pruebas de resumen de salida que han
pasado, así como las que fallaron. En este libro de texto,
Simplemente usaremos simple assert
declaraciones para pruebas automatizadas.
En el código a continuación, lst
está vinculado a un objeto de lista. En pitón , no todos los elementos de una lista deben ser de la
mismo tipo. Podemos verificar que todos tengan el mismo tipo y obtener un error si no lo son. Observe que con lst2
,
Una de las afirmaciones falla.
>>lst = ['a', 'b', 'c']
>>first_type = type(lst[0])
>>for item in lst:
>> assert type(item) == first_type
>>lst2 = ['a', 'b', 'c', 17]
>>first_type = type(lst2[0])
>>for item in lst2:
>> assert type(item) == first_type
>>>
Error
AssertionError: en la línea 9
Descripción
Un error de afirmación ocurre cuando Python encuentra una declaración de afirmación. Python evalúa la expresión a la derecha de la palabra afirmar; Si esa expresión es verdadera, todo está bien y el programa continúa. Si la expresión es falsa, Python plantea un error y se detiene.
Para arreglar
Verifique la expresión a la derecha de afirmar. La expresión es falsa y deberá determinar por qué es así. Es posible que simplemente desee imprimir las partes individuales de la expresión para comprender por qué se está evaluando a False.
6.3.2. Pruebas de valor de retorno
Probar si una función devuelve el valor correcto es el caso de prueba más fácil de definir. Simplemente verifique si el El resultado de invocar la función en una entrada particular produce la salida particular que espera. Echar un vistazo a el siguiente código.
>>def square(x):
>>#raise x to the second power
>> return x*x
>>print('testing square function')
>>assert square(3) == 9
>>>
testing square function
Para el juego de Hangman, esta
función 'en blanco' toma una palabra y algunas letras que se han
adivinado, y devuelve una versión
de la palabra con _ para todas las letras que no se han adivinado. ¿Cuál
de las siguientes es la forma correcta de escribir?
una prueba para verificar que 'debajo' se mantendrá en blanco como 'u_d__'
¿Cuándo el usuario ha adivinado las letras D y usted hasta ahora?
No hay comentarios.:
Publicar un comentario