8. Pruebas unitarias con GitHub Copilot
Prompts
Testing de tu código en segundos
# DAME UN SCRIPT PARA HACER UNIT TEST A LA FUNCION GET_TWEETS
## genera un script para hacer unit test de la funcion calcular_media
IA en equipos de data
Usar IA para programar es inevitable
Manejo de bases de datos
Crear tablas en SQL con GitHub Copilot
Consultas de SQL con GitHub Copilot y ChatGPT
Depuración de código usando inteligencia artificial
Documentación de código con Notion AI
Procesamiento de datos
Recolección de datos con ChatGPT como asistente
Limpieza de datos con Python y GitHub Copilot
Pruebas unitarias con GitHub Copilot
Visualización y análisis
IA para análisis de datos con Python
IA para visualización de datos y storytelling con Python
Análisis de datos con Data Analysis de ChatGPT
People Analytics con ChatGPT
Análisis de ventas con ChatGPT
Análisis de pérdida de clientes con ChatGPT
Análisis automático de gráficas e imágenes
Generación de datos
Generación de datasets con GPT-4
Aprendizaje y formación
Aprender o profundizar en nuevos conceptos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En la actualidad, el uso de inteligencia artificial y en especial los LLMs (Modelos de Lenguaje Extenso) en el desarrollo de software es cada vez más común, no solo para generar código sino también para testear y asegurar su correcto funcionamiento mediante pruebas unitarias. Aquí te mostramos cómo puedes emplear estas herramientas con eficacia.
El proceso de hacer pruebas unitarias en Python es esencial para asegurar el correcto comportamiento de nuestro código. Supongamos que tenemos una función llamada getTweets
, que extrae tweets de un determinado hashtag a través de la API de Twitter. Para definir un test unitario para esta función, podemos hacer uso de la función directa assert
de Python. Esto se ilustra en el código siguiente:
def test_getTweets():
tweets = getTweets('IA')
assert len(tweets) <= 50 # Asegurar que el número de tweets no exceda 50
# Comprobación de las columnas esperadas
for tweet in tweets:
assert 'text' in tweet and 'user' in tweet and 'isTweet' in tweet
assert type(tweet['text']) is str
assert type(tweet['user']) is str
assert type(tweet['isTweet']) is bool
Estos pasos permiten asegurarnos de que la función retorne el número correcto de tweets y que estos contengan las columnas y tipos de datos adecuados.
Copilot y ChatGPT son herramientas impulsadas por AI que pueden automatizar la generación de pruebas unitarias, contribuyendo a una codificación eficiente. Aquí tienes un ejemplo de cómo aplicar Copilot para crear un test unitario para una función llamada calcularMedia
:
def test_calcularMedia():
assert calcularMedia([1, 2, 3, 4, 5]) == 3 # Calcula la media
assert calcularMedia([-1, -2, -3]) == -2 # Funciona con números negativos
assert calcularMedia([0, 0, 0]) == 0 # Funciona con ceros
Estas herramientas no solo simplifican el proceso de construir pruebas, sino que también ofrecen sugerencias basadas en patrones observados en la codificación.
Un desafío común es realizar pruebas sobre funciones más complejas. Imaginemos una función que utiliza scikit-learn
para dividir un dataset en conjuntos de entrenamiento y prueba. A continuación, el uso de unittest
permite verificar que la división se hace correctamente:
from sklearn.model_selection import train_test_split
import unittest
def disfrutarDataSet(dataset):
X_train, X_test = train_test_split(dataset, test_size=0.2)
return X_train, X_test
class TestDataSetSplit(unittest.TestCase):
def test_split(self):
dataset = list(range(100))
X_train, X_test = disfrutarDataSet(dataset)
self.assertEqual(len(X_train), 80)
self.assertEqual(len(X_test), 20)
if __name__ == '__main__':
unittest.main()
Generar y ejecutar estos tests asegura que la división del dataset cumple con los criterios de tamaño especificados.
La automatización de tests unitarios con IA no solo optimiza el tiempo y esfuerzo, sino que también minimiza el riesgo de errores humanos y mejora la confiabilidad del código. Los desarrolladores pueden enfocarse más en la lógica empresarial y menos en las actividades repetitivas, gracias al poder de la IA.
Te animamos a que te adentres más en la práctica de pruebas unitarias usando inteligencia artificial. Aprovechar estas herramientas modernas puede llevar tus habilidades de programación a otro nivel y garantizar un código de mayor calidad. Así que, ¡no dudes en experimentar y seguir aprendiendo!
Aportes 13
Preguntas 1
Prompts
Testing de tu código en segundos
# DAME UN SCRIPT PARA HACER UNIT TEST A LA FUNCION GET_TWEETS
## genera un script para hacer unit test de la funcion calcular_media
import unittest
from unittest.mock import Mock, patch
import mi_modulo # Asegúrate de importar el módulo que contiene tus funciones
class TestMiModulo(unittest.TestCase):
@patch('mi_modulo.openai')
def test_return_productos(self, mock_openai):
mock_response = {
'choices': [{'message': {'content': '{"Descripcion": "Descripción de prueba", "compañia": "Empresa de prueba"}'}}]
}
mock_openai.ChatCompletion.create.return_value = Mock(**mock_response)
result = mi_modulo.return_productos('prueba')
self.assertEqual(result['Descripcion'], 'Descripción de prueba')
self.assertEqual(result['compañia'], 'Empresa de prueba')
def test_split_json(self):
sample_df = pd.DataFrame({'producto': ['silla'], 'descripciones': [{'Descripcion': 'Descripción', 'compañia': 'Empresa'}]})
result_df = mi_modulo.split_json(sample_df)
self.assertEqual(result_df['Descripcion'][0], 'Descripción')
self.assertEqual(result_df['compañia'][0], 'Empresa')
if name == ‘main’:
unittest.main()
Lo admito, nunca hago pruebas unitarias. Pero eso cambiará desde hoy 🚀
Resultado del Unit Test por Bing con carita feliz incluida y este fue el error que encontro:
“La longitud de train
debería ser el 80% del total, no el 70%. Por lo tanto, he cambiado `self.assertEqual(len(train).”
Aquí está el código de prueba unitaria para la función split_data
:
import unittest
class TestSplitData(unittest.TestCase):
def test_split_data(self):
train, test = split_data(df, test_size=0.2, random_state=42)
# Comprobamos que la longitud total es la misma
self.assertEqual(len(df), len(train) + len(test))
# Comprobamos que el tamaño del test es el esperado (20%)
self.assertEqual(len(test), int(0.2*len(df)))
# Comprobamos que el tamaño del train es el esperado (80%)
self.assertEqual(len(train), int(0.8*len(df)))
if __name__ == '__main__':
unittest.main(argv=['first-arg-is-ignored'], exit=False)
Por favor, ten en cuenta que he corregido la última línea de tu código de prueba unitaria. La longitud de train
debería ser el 80% del total, no el 70%. Por lo tanto, he cambiado self.assertEqual(len(train), int(0.7*len(df)))
a self.assertEqual(len(train), int(0.8*len(df)))
. Espero que esto te ayude! 😊
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?