Preguntas sobre la Pirámide de Pruebas

No. Pregunta Respuesta
1 ¿Qué es la pirámide de pruebas? Es una estrategia que sugiere tener más pruebas unitarias que pruebas de integración y menos pruebas end-to-end.
2 ¿Cuál es el objetivo principal de la pirámide de pruebas? Reducir el costo y el tiempo de ejecución de pruebas al tener una estructura de pruebas balanceada.
3 ¿Qué tipo de pruebas se encuentran en la base de la pirámide de pruebas? Pruebas unitarias.
4 ¿Qué tipo de pruebas se encuentran en el medio de la pirámide de pruebas? Pruebas de integración.
5 ¿Qué tipo de pruebas se encuentran en la cima de la pirámide de pruebas? Pruebas end-to-end.
6 ¿Por qué es importante tener más pruebas unitarias? Porque son rápidas de ejecutar y cubren gran parte del código base.
7 ¿Cómo se pueden organizar las pruebas unitarias en Java? Usando JUnit. Ejemplo:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class MathUtilsTest {
    @Test
    public void testAdd() {
        assertEquals(5, MathUtils.add(2, 3));
    }
}
                    
8 ¿Cómo se pueden organizar las pruebas unitarias en Python? Usando unittest. Ejemplo:

import unittest

def add(x, y):
    return x + y

class TestMathUtils(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
                    
9 ¿Cómo se pueden organizar las pruebas unitarias en C#? Usando NUnit. Ejemplo:

using NUnit.Framework;

public class MathUtilsTests {
    [Test]
    public void TestAdd() {
        Assert.AreEqual(5, MathUtils.Add(2, 3));
    }
}
                    
10 ¿Cómo se pueden organizar las pruebas unitarias en TypeScript? Usando Jest. Ejemplo:

import { add } from './mathUtils';

test('adds 2 + 3 to equal 5', () => {
  expect(add(2, 3)).toBe(5);
});
                    
11 ¿Cuál es la función principal de las pruebas de integración? Verificar la interacción entre diferentes módulos o servicios.
12 ¿Qué herramienta se puede usar para pruebas de integración en Java? JUnit con @SpringBootTest. Ejemplo:

import org.springframework.boot.test.context.SpringBootTest;
import org.junit.jupiter.api.Test;

@SpringBootTest
public class IntegrationTest {
    @Test
    public void testIntegration() {
        // Test de integración
    }
}
                    
13 ¿Qué herramienta se puede usar para pruebas de integración en Python? pytest con fixtures. Ejemplo:

import pytest

@pytest.fixture
def setup_database():
    # Configuración de la base de datos
    yield db
    # Limpieza de la base de datos

def test_database_query(setup_database):
    result = setup_database.query('SELECT * FROM table')
    assert result == expected
                    
14 ¿Qué herramienta se puede usar para pruebas de integración en C#? SpecFlow para pruebas BDD. Ejemplo:

[Binding]
public class IntegrationSteps {
    [Given(@"I have an API client")]
    public void GivenIHaveAnAPIClient() {
        // Configuración del cliente
    }

    [When(@"I send a request")]
    public void WhenISendARequest() {
        // Envío de la solicitud
    }

    [Then(@"I should receive a response")]
    public void ThenIShouldReceiveAResponse() {
        // Verificación de la respuesta
    }
}
                    
15 ¿Qué herramienta se puede usar para pruebas de integración en TypeScript? Supertest con Jest. Ejemplo:

import request from 'supertest';
import app from './app';

describe('GET /api/resource', () => {
  it('should return a response', async () => {
    const response = await request(app).get('/api/resource');
    expect(response.status).toBe(200);
  });
});
                    
16 ¿Qué importancia tienen las pruebas end-to-end en la pirámide de pruebas? Verifican el sistema en su totalidad, asegurando que los componentes funcionen correctamente en un entorno simulado.
17 ¿Cuál es una herramienta común para pruebas end-to-end en Java? Selenium. Ejemplo:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.junit.jupiter.api.Test;

public class EndToEndTest {
    @Test
    public void testWebsite() {
        WebDriver driver = new ChromeDriver();
        driver.get("http://example.com");
        // Verificaciones
        driver.quit();
    }
}
                    
18 ¿Cuál es una herramienta común para pruebas end-to-end en Python? Selenium con pytest. Ejemplo:

from selenium import webdriver
import pytest

@pytest.fixture
def driver():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

def test_website(driver):
    driver.get('http://example.com')
    assert "Example Domain" in driver.title
                    
19 ¿Cuál es una herramienta común para pruebas end-to-end en C#? SpecFlow con Selenium. Ejemplo:

[Binding]
public class EndToEndSteps {
    private IWebDriver _driver;

    [Given(@"I navigate to the website")]
    public void GivenINavigateToTheWebsite() {
        _driver = new ChromeDriver();
        _driver.Navigate().GoToUrl("http://example.com");
    }

    [Then(@"I should see the title")]
    public void ThenIShouldSeeTheTitle() {
        Assert.AreEqual("Example Domain", _driver.Title);
        _driver.Quit();
    }
}
                    
20 ¿Cuál es una herramienta común para pruebas end-to-end en TypeScript? Cypress. Ejemplo:

describe('Website Tests', () => {
  it('should load the website', () => {
    cy.visit('http://example.com');
    cy.title().should('include', 'Example Domain');
  });
});
                    
21 ¿Cómo se puede asegurar que las pruebas unitarias sean rápidas? Diseñando pruebas que no dependan de recursos externos y que se ejecuten en el contexto de una sola unidad de código.
22 ¿Cómo se pueden manejar las dependencias en pruebas unitarias en Java? Usando mocks y stubs. Ejemplo con Mockito:

import static org.mockito.Mockito.*;

public class ServiceTest {
    @Test
    public void testService() {
        Dependency mockDependency = mock(Dependency.class);
        when(mockDependency.getValue()).thenReturn(42);
        Service service = new Service(mockDependency);
        assertEquals(42, service.getValue());
    }
}
                    
23 ¿Cómo se pueden manejar las dependencias en pruebas unitarias en Python? Usando el módulo unittest.mock. Ejemplo:

from unittest.mock import Mock

def test_service():
    mock_dependency = Mock()
    mock_dependency.get_value.return_value = 42
    service = Service(mock_dependency)
    assert service.get_value() == 42
                    
24 ¿Cómo se pueden manejar las dependencias en pruebas unitarias en C#? Usando Moq. Ejemplo:

using Moq;

public class ServiceTests {
    [Test]
    public void TestService() {
        var mockDependency = new Mock();
        mockDependency.Setup(d => d.GetValue()).Returns(42);
        var service = new Service(mockDependency.Object);
        Assert.AreEqual(42, service.GetValue());
    }
}
                    
25 ¿Cómo se pueden manejar las dependencias en pruebas unitarias en TypeScript? Usando Jest mocks. Ejemplo:

import { Service } from './service';
import { Dependency } from './dependency';

jest.mock('./dependency');

test('should return mocked value', () => {
  const mockDependency = new Dependency() as jest.Mocked;
  mockDependency.getValue.mockReturnValue(42);
  const service = new Service(mockDependency);
  expect(service.getValue()).toBe(42);
});
                    
26 ¿Cómo se puede lograr una cobertura completa de código? Escribiendo pruebas para cada camino posible del código, incluidas condiciones, ciclos y excepciones.
27 ¿Qué es una prueba de integración en el contexto de la pirámide de pruebas? Es una prueba que verifica la interacción entre múltiples componentes o servicios para asegurar que funcionen juntos correctamente.
28 ¿Qué es una prueba end-to-end y qué ventajas ofrece? Es una prueba que valida el flujo completo de la aplicación desde el inicio hasta el fin, asegurando que todos los componentes funcionen juntos. Ofrece una visión integral del sistema.
29 ¿Cómo puede la pirámide de pruebas ayudar en la entrega continua? Permite una integración más fluida y rápida al tener una alta cantidad de pruebas unitarias rápidas y confiables, mientras que las pruebas más lentas se ejecutan con menos frecuencia.
30 ¿Qué es una prueba de regresión y cómo se relaciona con la pirámide de pruebas? Es una prueba que asegura que los cambios recientes no han afectado negativamente el funcionamiento existente. Se puede realizar en diferentes niveles de la pirámide de pruebas, principalmente en pruebas de integración y end-to-end.
31 ¿Cuál es una estrategia para reducir el tiempo de ejecución de pruebas end-to-end? Reducir el número de pruebas end-to-end y enfocarse en los casos más críticos, mientras se utilizan pruebas unitarias e integración para cubrir otros aspectos.
32 ¿Cómo se debe abordar la escritura de pruebas en una arquitectura de microservicios? Escribir pruebas unitarias para cada microservicio, pruebas de integración para las interacciones entre ellos, y pruebas end-to-end para verificar el sistema completo.
33 ¿Qué es la prueba de "smoke" y cuándo se debe usar? Es una prueba rápida para verificar que el sistema básico funciona correctamente. Se usa al realizar despliegues o cambios importantes.
34 ¿Cómo puede la automatización de pruebas mejorar la eficiencia del equipo de desarrollo? Permite ejecutar pruebas de manera rápida y repetitiva, detectando errores tempranamente y reduciendo el tiempo necesario para las pruebas manuales.
35 ¿Qué es el "Test-Driven Development" (TDD) y cómo se relaciona con la pirámide de pruebas? Es una técnica de desarrollo en la que las pruebas se escriben antes del código. Asegura una base sólida de pruebas unitarias y fomenta una alta cobertura de pruebas.
36 ¿Cómo se pueden gestionar las pruebas de rendimiento dentro de la pirámide de pruebas? Realizando pruebas de rendimiento como pruebas de carga y estrés en niveles específicos, como pruebas de integración o end-to-end, según el impacto en el sistema.
37 ¿Qué es el "Behavior-Driven Development" (BDD) y cómo encaja en la pirámide de pruebas? Es una metodología que fomenta la colaboración entre desarrolladores y stakeholders usando lenguaje natural para definir el comportamiento esperado. Se usa principalmente para pruebas de integración y end-to-end.
38 ¿Cómo se puede garantizar que las pruebas sean independientes entre sí? Diseñando pruebas que no dependan del estado compartido y asegurando que cada prueba se pueda ejecutar de manera aislada.
39 ¿Qué es el "Continuous Testing" y cómo se aplica en la pirámide de pruebas? Es la práctica de ejecutar pruebas continuamente a lo largo del ciclo de desarrollo para detectar defectos tempranamente. Se aplica en la pirámide de pruebas mediante la automatización y la integración continua.
40 ¿Qué papel juegan las pruebas unitarias en la pirámide de pruebas? Son la base de la pirámide de pruebas, proporcionando una rápida retroalimentación sobre el funcionamiento de las unidades individuales de código.