# Pregunta Respuesta
1 ¿Qué es una prueba unitaria? Una prueba que valida la funcionalidad de una unidad de código, como un método o una función, de manera aislada.
2 ¿Qué herramienta se usa comúnmente para pruebas unitarias en Java? JUnit. Ejemplo:

import org.junit.jupiter.api.Test;

public class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }
}
                    
3 ¿Cómo se realiza una prueba unitaria en Python? Se utiliza el módulo unittest. Ejemplo:

import unittest

class TestCalculator(unittest.TestCase):
    def test_add(self):
        calc = Calculator()
        self.assertEqual(calc.add(2, 3), 5)

if __name__ == '__main__':
    unittest.main()
                    
4 ¿Qué framework se utiliza para pruebas unitarias en C#? NUnit. Ejemplo:

using NUnit.Framework;

[TestFixture]
public class CalculatorTests {
    [Test]
    public void TestAdd() {
        Calculator calc = new Calculator();
        Assert.AreEqual(5, calc.Add(2, 3));
    }
}
                    
5 ¿Cómo se hacen pruebas unitarias en TypeScript? Se usa Jest. Ejemplo:

import { add } from './calculator';

test('adds 1 + 2 to equal 3', () => {
    expect(add(1, 2)).toBe(3);
});
                    
6 ¿Qué es el "Test Driven Development" (TDD)? Una metodología de desarrollo en la que se escriben primero las pruebas y luego el código para hacer que las pruebas pasen.
7 ¿Cómo se crea un "mock" en Python? Usando unittest.mock. Ejemplo:

from unittest.mock import MagicMock

def test_function():
    mock = MagicMock(return_value=5)
    assert mock() == 5
                    
8 ¿Cómo se usa el atributo [Test] en NUnit? Se usa para marcar un método como una prueba unitaria en C#. Ejemplo:

using NUnit.Framework;

[TestFixture]
public class MyTests {
    [Test]
    public void MyTest() {
        // test code
    }
}
                    
9 ¿Qué es un "assert" en el contexto de pruebas unitarias? Una afirmación que verifica si un resultado esperado coincide con un resultado real.
10 ¿Cómo se usa "assertEquals" en JUnit? Para comparar valores esperados con valores reales en pruebas. Ejemplo:

import static org.junit.jupiter.api.Assertions.assertEquals;

@Test
public void testAdd() {
    Calculator calc = new Calculator();
    assertEquals(5, calc.add(2, 3));
}
                    
11 ¿Qué es la cobertura de código? Una métrica que indica el porcentaje de código fuente que es ejecutado por las pruebas unitarias.
12 ¿Qué herramientas se usan para medir la cobertura de código en Java? Jacoco y Cobertura. Ejemplo con Jacoco:

# En el archivo pom.xml, añadir la dependencia de Jacoco:

    org.jacoco
    jacoco-maven-plugin
    0.8.7
    
        
            
                prepare-agent
                report
            
        
    

                    
13 ¿Cómo se puede realizar la integración de pruebas en un pipeline CI/CD? Se añaden etapas en el pipeline para ejecutar las pruebas unitarias y generar reportes de resultados. Ejemplo en Jenkins:

pipeline {
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }
}
                    
14 ¿Qué es un "test case"? Un conjunto de condiciones y datos de prueba diseñados para evaluar una parte específica del código.
15 ¿Qué es la técnica de "Boundary Value Analysis"? Una técnica de prueba que se enfoca en las fronteras de los valores de entrada para encontrar errores.
16 ¿Cómo se usan los "stubs" en pruebas unitarias? Son objetos simulados que devuelven respuestas predefinidas para las pruebas.
17 ¿Qué es el "Refactoring" en el contexto de pruebas? El proceso de mejorar el código sin cambiar su comportamiento externo, basado en los resultados de las pruebas.
18 ¿Cómo se puede realizar la parametrización de pruebas en JUnit? Utilizando la anotación @ParameterizedTest. Ejemplo:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class ParameterizedTestExample {
    @ParameterizedTest
    @ValueSource(strings = {"racecar", "radar", "level"})
    void testIsPalindrome(String word) {
        assertTrue(isPalindrome(word));
    }
}
                    
19 ¿Qué es un "test suite"? Un conjunto de pruebas unitarias agrupadas que se ejecutan juntas para verificar el comportamiento de un módulo.
20 ¿Cómo se pueden manejar excepciones en pruebas unitarias en Python? Usando el contexto assertRaises. Ejemplo:

import unittest

def divide(x, y):
    if y == 0:
        raise ValueError("Cannot divide by zero")
    return x / y

class TestDivide(unittest.TestCase):
    def test_divide_by_zero(self):
        with self.assertRaises(ValueError):
            divide(1, 0)
                    
21 ¿Qué es un "test fixture"? Un conjunto de datos y condiciones que se configuran antes de ejecutar las pruebas y se limpian después.
22 ¿Cómo se realiza la configuración de un "test fixture" en JUnit? Utilizando los métodos @BeforeEach y @AfterEach. Ejemplo:

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;

public class MyTest {
    @BeforeEach
    void setUp() {
        // Código de configuración
    }

    @AfterEach
    void tearDown() {
        // Código de limpieza
    }
}
                    
23 ¿Qué es un "integration test"? Una prueba que verifica la interacción y integración entre diferentes módulos o servicios del sistema.
24 ¿Cómo se pueden hacer pruebas de rendimiento? Usando herramientas como JMeter o LoadRunner para simular cargas y medir el rendimiento del sistema.
25 ¿Qué es una prueba de regresión? Una prueba realizada para asegurar que los cambios en el código no han introducido nuevos errores.
26 ¿Qué es el "Code Coverage" y cómo se mide? Es la proporción de código ejecutado durante las pruebas. Se mide usando herramientas como Jacoco o Istanbul.
27 ¿Cómo se pueden realizar pruebas unitarias en un entorno de integración continua? Se configuran los scripts de prueba para ejecutarse automáticamente en el servidor de CI después de cada commit.
28 ¿Qué es el "Test Pyramid"? Una estrategia de pruebas que sugiere tener más pruebas unitarias que pruebas de integración y menos pruebas end-to-end.
29 ¿Cómo se puede asegurar la calidad de las pruebas unitarias? Implementando prácticas como la revisión de código, pruebas automatizadas y cobertura de código adecuada.
30 ¿Qué es el "Test Driven Development" (TDD) y cómo se implementa? TDD es una metodología que consiste en escribir pruebas antes de escribir el código. Se implementa escribiendo una prueba que falla, luego escribiendo el código necesario para pasar la prueba y finalmente refactorizando.
31 ¿Qué es una prueba de caja negra? Una prueba que evalúa la funcionalidad del software sin conocer su estructura interna.
32 ¿Qué es una prueba de caja blanca? Una prueba que examina el funcionamiento interno del software, como el flujo de control y las estructuras de datos.
33 ¿Cómo se puede implementar el patrón "Arrange-Act-Assert" en pruebas unitarias? Es un patrón para estructurar pruebas unitarias que implica organizar (Arrange) el escenario de prueba, actuar (Act) sobre el código y afirmar (Assert) los resultados.
34 ¿Cómo se usan los "fakes" en pruebas unitarias? Son implementaciones de prueba que simulan el comportamiento de componentes reales sin tener efectos secundarios.
35 ¿Qué es el "Mock Object Pattern"? Un patrón de diseño que usa objetos simulados para controlar y verificar la interacción con dependencias.
36 ¿Cómo se realiza la simulación de dependencias en Java? Usando bibliotecas como Mockito. Ejemplo:

import static org.mockito.Mockito.*;

public class MyServiceTest {
    @Test
    public void testService() {
        MyDependency mockDependency = mock(MyDependency.class);
        when(mockDependency.someMethod()).thenReturn("Mocked Response");

        MyService service = new MyService(mockDependency);
        String result = service.useDependency();
        assertEquals("Mocked Response", result);
    }
}
                    
37 ¿Cómo se utilizan los "fixtures" en pruebas unitarias en Python? Se pueden configurar usando métodos de configuración en el módulo pytest. Ejemplo:

import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

def test_sample_data(sample_data):
    assert sample_data["key"] == "value"
                    
38 ¿Qué es el "Behavior-Driven Development" (BDD) y cómo se usa en TypeScript? BDD es una metodología que utiliza lenguaje natural para definir el comportamiento esperado del software. Se usa con herramientas como Cucumber. Ejemplo:

import { Given, When, Then } from 'cucumber';
import { expect } from 'chai';

Given('I have {int} cukes', function (cucumbers) {
  this.cukes = cucumbers;
});

When('I add {int} cukes', function (cucumbers) {
  this.cukes += cucumbers;
});

Then('I should have {int} cukes', function (cucumbers) {
  expect(this.cukes).to.equal(cucumbers);
});
                    
39 ¿Qué es una prueba de "Smoke Testing"? Una prueba superficial que verifica que las funcionalidades básicas del software funcionan después de una implementación.
40 ¿Cómo se puede usar el comando pytest para ejecutar pruebas en paralelo en Python? Usando el plugin pytest-xdist. Ejemplo:

pip install pytest-xdist
pytest -n 4
                    
41 ¿Qué es una prueba de "Integration Testing"? Una prueba que evalúa cómo interactúan varios componentes del sistema en conjunto.
42 ¿Cómo se puede asegurar la idempotencia de las pruebas unitarias? Diseñando pruebas que siempre produzcan el mismo resultado independientemente de la cantidad de veces que se ejecuten.
43 ¿Cómo se configuran las pruebas unitarias en un proyecto TypeScript con Jest? Instalando jest y @types/jest, y configurando el archivo jest.config.js. Ejemplo:

npm install --save-dev jest @types/jest
{
  "preset": "ts-jest",
  "testEnvironment": "node"
}
                    
44 ¿Qué es el "Test Coverage" y por qué es importante? El porcentaje del código que es ejecutado durante las pruebas. Es importante porque ayuda a identificar áreas no cubiertas por las pruebas.
45 ¿Cómo se realiza la prueba de "Mocking" en Java? Utilizando frameworks como Mockito para crear objetos simulados y verificar interacciones. Ejemplo:

import static org.mockito.Mockito.*;

public class MyServiceTest {
    @Test
    public void testMocking() {
        MyDependency mockDependency = mock(MyDependency.class);
        verify(mockDependency).someMethod();
    }
}