Realización de pruebas de clase de equivalencia con Pytest

Requisito previo: prueba de clase de equivalencia

Para realizar pruebas de clase de equivalencia automatizadas, podemos utilizar las bibliotecas Python Pytest o Unittest. En este artículo, usaremos la biblioteca Pytest para ejecutar casos de prueba para un programa simple.

Pregunta:
Realice pruebas de equivalencia para un programa que determina el tipo de triángulo dada la longitud de sus tres lados A, B y C. El rango de longitud de los lados se encuentra entre 10 y 50 (ambos inclusive).

Código en el archivo Triangletype.py :

Python3

# import math
  
# parent class for Error
class Error(BaseException):
    pass
  
# child class of Error named OutOfRangeError
class OutOfRangeError(Error):
    def __init__(self, message):
        self.message = message
  
# child class of Error named TriangleError        
class TriangleError(Error):
    def __init__(self, message):
        self.message = message
  
# checks if variables are in range
# if variables not in range then OutOfRangeError is raised
def checkRange(a, b, c):
    if a<10 or a>50:
        raise OutOfRangeError('A is out of the given range')
    if b<10  or b>50:
        raise OutOfRangeError('B is out of the given range') 
    if c<10 or c>50:
        raise OutOfRangeError('C is out of the given range')
  
# checks if the given values of a, b, c can form a triangle
# if not, then Triangle error is raised
def checkTriangle(a, b, c):
    if a + b<= c or b + c<= a or c + a<= b:
        raise TriangleError('Triangle cannot be formed with these sides')
  
# determines the type of triangle        
def triangleType(a, b, c):
    checkRange(a, b, c)
    checkTriangle(a, b, c)
    # s = (a + b+c)/2
    # ar = math.sqrt(s*(s-a)*(s-b)*(s-c))
    # inradius = ar / s
    if(a == b and b == c):   
        return "Equilateral Triangle"
    elif(a == b or a == c or b == c):
        return "Isosceles Triangle"
    else:
        return "Scalene Triangle"
  
  
def main():
    try:
        print("Enter the sides of the triangle in range [10-50]")
  
        a = int(input('Enter Side A:'))
        b = int(input('Enter Side B:'))
        c = int(input('Enter Side C:'))
    except ValueError as v:
        print(v + " Raised :Input is not an integer.")
        exit(0)
    try:
        checkRange(a, b, c)
    except OutOfRangeError as e:
        print("OutOfRangeError:" + e.message)
      
    try:
        checkTriangle(a, b, c)
    except TriangleError as e:
        print('TriangleError:' + e.message)
  
    typeOfTriangle = triangleType(a, b, c)
  
    print("The triangle is: " + typeOfTriangle)
  
if __name__ == "__main__":
    main()

Ahora, necesitamos escribir casos de prueba para el programa anterior usando la biblioteca Pytest. Cada caso de prueba está escrito en una función separada donde usamos la función pytest.raises para verificar que la entrada dada sea válida o no. Para el programa anterior, creamos 7 clases no válidas y 1 clase válida. Las 7 clases inválidas son:

  • un < 10
  • un > 50
  • b < 10
  • b > 50
  • do < 10
  • c > 50
  • Los valores dados de a, b, c no pueden formar un triángulo

La 1 clase válida es:

  • 10 <= a, b, c <= 50

NOTA: El nombre de la función y el nombre del archivo de prueba siempre deben comenzar con la palabra ‘prueba’.

Código en el archivo test_triangletype_eq.py :

Python3

import pytest
  
# importing classes and function which we use in this file
from triangletype import OutOfRangeError
from triangletype import TriangleError
from triangletype import triangleType
  
# check if a < 10
def test_invalid_less_a():
    with pytest.raises(OutOfRangeError):
        triangleType(9, 20, 15)
  
# check if b < 10        
def test_invalid_less_b():
    with pytest.raises(OutOfRangeError):
        triangleType(20, 9, 15)
          
# check if c < 10        
def test_invalid_less_c():
    with pytest.raises(OutOfRangeError):
        triangleType(20, 15, 9)
  
  
# check if a > 50
def test_invalid_more_a():
    with pytest.raises(OutOfRangeError):
        triangleType(51, 30, 45)
          
# check if b > 50        
def test_invalid_more_b():
    with pytest.raises(OutOfRangeError):
        triangleType(30, 51, 45)
          
# check if c > 50        
def test_invalid_more_c():
    with pytest.raises(OutOfRangeError):
        triangleType(30, 45, 51)
  
# check if a, b, c can form a triangle or not        
def test_valid_invalidtriangle():
    with pytest.raises(TriangleError):
        triangleType(20, 15, 40)
  
# valid class - determines type of triangle        
def test_valid():
    assert triangleType(20, 15, 10) == "Scalene Triangle" 

Para ejecutar los casos de prueba anteriores, cree dos archivos separados Triangletype.py y test_triangletype_eq.py en una sola carpeta. Para ejecutar escribe el siguiente comando:

pytest

O

pytest -v

pytest -v muestra la salida detallada.

La salida se muestra a continuación:

Como podemos ver en el resultado anterior, se aprobaron los 8 casos de prueba. Sin embargo, si editamos un caso de prueba, por ejemplo, si cambiamos el valor de la variable c a 90 en el caso de prueba test_valid() en el archivo test_triangletype_eq.py , entonces el caso de prueba falla:

Publicación traducida automáticamente

Artículo escrito por ps17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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