No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Pruebas unitarias con GitHub Copilot

8/17
Recursos

Aportes 12

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

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

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()

Realizar pruebas unitarias antes de enviar el c贸digo al equipo de pruebas es una pr谩ctica recomendable. Esto nos permite verificar si nuestro c贸digo funciona correctamente.

Lo admito, nunca hago pruebas unitarias. Pero eso cambiar谩 desde hoy 馃殌

Este fue el promt que coloque: *Necesito que actues como un especialista en Python y en desarrollo de software. Tengo este codigo para calcular la media de un conjunto de n煤meros:* *def calcular\_media(numeros):* *return sum(numeros) / len(numeros)* *Ahora lo que necesito es que genera un script para hacer unit test de la funcion calcular\_media* *驴Puedes hacerlo y al mismo tiempo explicar y documentar cada uno de los pasos del test unitario que vas a realizar?* A lo que me arrojo lo siguiente: **隆Claro! Vamos a crear un script de pruebas unitarias para la funci贸n** `calcular_media` **utilizando el m贸dulo** `unittest` **de Python. Aqu铆 tienes un ejemplo:** `import unittest` `def calcular_media(numeros):` ` return sum(numeros) / len(numeros)` `class TestCalcularMedia(unittest.TestCase):` ` def test_media_enteros_positivos(self):` ` resultado = calcular_media([1, 2, 3, 4, 5])` ` self.assertEqual(resultado, 3.0)` ` def test_media_enteros_negativos(self):` ` resultado = calcular_media([-1, -2, -3, -4, -5])` ` self.assertEqual(resultado, -3.0)` ` def test_media_floats(self):` ` resultado = calcular_media([0.5, 1.5, 2.5, 3.5, 4.5])` ` self.assertEqual(resultado, 2.5)` ` def test_media_lista_vacia(self):` ` with self.assertRaises(ZeroDivisionError):` ` calcular_media([])` `if __name__ == '__main__':` ` unittest.main()` Esta fue la respuesta final: **Ahora, explicar茅 cada paso:** 1. **Importar el m贸dulo** `unittest`**: En la primera l铆nea, importamos el m贸dulo** `unittest` **para utilizar su funcionalidad de pruebas unitarias.** 2. **Definir la funci贸n a probar: La funci贸n** `calcular_media` **est谩 definida como en tu ejemplo.** 3. **Crear una clase de pruebas (**`TestCalcularMedia`**): Creamos una clase que hereda de** `unittest.TestCase`**. Esta clase contendr谩 todos nuestros casos de prueba.** 4. **Definir casos de prueba: Cada m茅todo dentro de la clase que comienza con** `test_` **representa un caso de prueba. En cada caso, llamamos a** `calcular_media` **con un conjunto espec铆fico de datos y usamos los m茅todos de aserci贸n proporcionados por** `unittest` **para verificar si el resultado es el esperado.** 5. **Manejar casos especiales: En el caso de una lista vac铆a, utilizamos** `assertRaises` **para asegurarnos de que se lance la excepci贸n** `ZeroDivisionError`**.** 6. **Ejecutar las pruebas: Finalmente, utilizamos** `unittest.main()` **para ejecutar todas las pruebas cuando ejecutamos este script directamente.** **Espero que esto te sea 煤til. 驴Hay algo en particular que quieras que explique m谩s detalladamente?**
Esto se compleenta bien con el Curso de Herramientas de Inteligencia Artificial para Developers
Entonces el prompt es Genera un script para hacer pruebas unitaria de la funci贸n.
Es importante tener en cuenta que al trabajar con IA, resulta altamente beneficioso ser detallado y espec铆fico en nuestras solicitudes.
Cuando utilicemos este tipo de tecnolog铆as como apoyo, es esencial realizar revisiones para asegurarnos de que las acciones que est谩n siendo realizadas tengan coherencia y sentido.
Para explorar las opciones alternativas proporcionadas por Copilot, simplemente debes ubicarte sobre el c贸digo generado y observar las diversas alternativas que esta herramienta te ofrece.
Las pruebas unitarias, tambi茅n conocidas como "unit tests" en ingl茅s, son un tipo de prueba en el desarrollo de software que se centra en evaluar individualmente las unidades m谩s peque帽as de c贸digo de un programa. Una unidad de c贸digo generalmente se refiere a una funci贸n, m茅todo o procedimiento espec铆fico en un programa. El objetivo principal de las pruebas unitarias es verificar que cada unidad de c贸digo funcione correctamente de manera aislada, es decir, que produzca los resultados esperados cuando se le proporcionan entradas espec铆ficas. Aqu铆 hay algunas caracter铆sticas clave de las pruebas unitarias: 1. **Aislamiento:** Las pruebas unitarias se dise帽an para probar una sola unidad de c贸digo a la vez, sin depender de otras partes del programa. Cualquier dependencia externa, como bases de datos o servicios web, se simula o se utilizan "dobles" (como mocks o stubs) para garantizar el aislamiento. 2. **Automatizaci贸n:** Las pruebas unitarias se ejecutan autom谩ticamente mediante herramientas de prueba espec铆ficas. Esto permite una r谩pida detecci贸n de errores y facilita la incorporaci贸n de pruebas en el proceso de desarrollo continuo. 3. **Rapidez:** Dado que las pruebas unitarias se enfocan en unidades de c贸digo peque帽as, generalmente son r谩pidas de ejecutar. Esto permite una retroalimentaci贸n r谩pida sobre la funcionalidad de las unidades individuales y facilita la detecci贸n temprana de problemas. 4. **Repetibilidad:** Las pruebas unitarias deben ser repetibles, lo que significa que deber铆an dar los mismos resultados cada vez que se ejecuten, siempre que las entradas sean las mismas. 5. **Facilitan la refactorizaci贸n:** Las pruebas unitarias proporcionan un nivel de seguridad al realizar cambios en el c贸digo existente. Si todas las pruebas unitarias siguen pasando despu茅s de una refactorizaci贸n, es m谩s probable que el c贸digo siga funcionando correctamente. 6. **Documentaci贸n viva:** Las pruebas unitarias tambi茅n sirven como documentaci贸n viva del comportamiento esperado de una unidad de c贸digo. Otros desarrolladores pueden revisar las pruebas para comprender c贸mo se supone que debe funcionar el c贸digo. En resumen, las pruebas unitarias son una pr谩ctica esencial en el desarrollo de software que ayuda a garantizar la calidad y la fiabilidad del c贸digo al verificar que las unidades de c贸digo individuales funcionen seg煤n lo previsto. Estas pruebas son una parte fundamental de la metodolog铆a de desarrollo de software conocida como Desarrollo Basado en Pruebas (Test-Driven Development, TDD) y son una pr谩ctica com煤n en la ingenier铆a de software moderna.

Resultado del Unit Test por Bing con carita feliz incluida y este fue el error que encontro:
鈥淟a 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! 馃槉