window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Guía rápida sobre cómo ejecutar contenedores desde pruebas - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2022-08-16
Desarrollo de software

Guía rápida sobre cómo ejecutar contenedores desde pruebas

Bartlomiej Kuczyński

Aprenda a ejecutar pruebas de formularios de contenedores en nuestro artículo relacionado con Java, donde nuestro desarrollador java senior muestra toda la magia.

Utilizo Spring Boot en el proyecto para reducir la burocracia. Los contenedores de prueba son independientes de Marco de trabajo de Spring y puedes usarlos sin eso.

Yo uso la versión 1.17.3 de Testcontainers, pero siéntete libre de usar la más reciente. Pruebas con contenedor Postgres.

Primero define contenedor:

public class Postgres13TC extends PostgreSQLContainer {
  private static final Postgres13TC TC = new Postgres13TC();

  private Postgres13TC() {
    super("postgres:13.2");
  }

  public static Postgres13TC getInstance() {
    return TC;
  }

  @Override
  public void start() {
    super.start();
    System.setProperty("DB_URL", TC.getJdbcUrl());
    System.setProperty("DB_USERNAME", TC.getUsername());
    System.setProperty("DB_PASSWORD", TC.getPassword());
  }

  @Override
  public void stop() {
    // no hace nada. Esta es una instancia compartida. Deja que la JVM se encargue de esta operación.
  }
}

A continuación inicializamos el contexto de la aplicación Spring. Obtenemos toda la configuración de la fuente de datos de la instancia del contenedor y la establecemos como configuración de Spring:

public class ContainerInit implements ApplicationContextInitializer {

  public static Postgres13TC postgres13TC;

  static {
    postgres13TC = Postgres13TC.getInstance();
    postgres13TC.start();
  }

  @Override
  public void initialize(ConfigurableApplicationContext applicationContext) {
    TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
        applicationContext,
        "spring.datasource.url=" + postgres13TC.getJdbcUrl(),
        "spring.datasource.username=" + postgres13TC.getUsername(),
        "spring.datasource.password=" + postgres13TC.getPassword(),
        "db.host=" + postgres13TC.getHost(),
        "db.port=" + postgres13TC.getMappedPort(postgres13TC.POSTGRESQL_PORT),
        "db.name=" + postgres13TC.getDatabaseName(),
        "db.username=" + postgres13TC.getUsername(),
        "db.password=" + postgres13TC.getPassword()
    );
  }
}

Por último, podemos ejecutar nuestra prueba, y todo se iniciará bajo el capó:

@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(replace = NONE)
@ContextConfiguration(inicializadores = ContainerInit.class)
@ContenedoresDePrueba
clase DummyRepositoryTest {

  @Autoconectado
  privado DummyRepository dummyRepository;

  @Prueba
  void shouldReturnDummy() {
    var byId = dummyRepository.getById(10L);
    var expected = new Dummy();
    expected.setId(10L);
    assertThat(byId).completes().emitsCount(1).emits(expected);
  }
}

O si queremos ejecutar pruebas independientes de Spring, podemos utilizar directamente el contenedor:

@Contenedoresdepruebas
clase SimpleDbTest {

  @Contenedor
  private static final Postgres13TC postgres13TC = Postgres13TC.getInstance();

  @Prueba
  void testConnection() {
    assumeThat(postgres13TC.isRunning());
    var connectionProps = new Properties();
    connectionProps.put("usuario", postgres13TC.getUsername());
    connectionProps.put("contraseña", postgres13TC.getPassword());
    try (Connection connection = DriverManager.getConnection(postgres13TC.getJdbcUrl(),
        connectionProps)) {
    var resultSet = connection.prepareStatement("Select 1").executeQuery();
    resultSet.next();
    assertThat(resultSet.getInt(1)).isEqualTo(1);
    } catch (SQLException sqlException) {
    assertThat((Exception) sqlException).doesNotThrowAnyException();
    }
  }
}

Resumen

Testcontainers son herramientas muy fáciles de usar que nos ayudan a crear pruebas de integración que utilizan contenedores Docker. Eso nos da más flexibilidad y aumenta la velocidad de desarrollo. Una configuración adecuada de las pruebas reduce el tiempo necesario para embarcar a los nuevos desarrolladores. No necesitan configurar todas las dependencias, sólo ejecutar las pruebas escritas con los archivos de configuración seleccionados.

bandera de cooperación

Artículos relacionados

Desarrollo de software

9 errores que hay que evitar al programar en Java

¿Qué errores deben evitarse al programar en Java? En el siguiente artículo responderemos a esta pregunta.

The Codest
Rafal Sawicki Desarrollador Java
Soluciones para empresas y escalas

¿Cómo puede Java ayudar a su empresa?

Antes de empezar, me gustaría recordarte una cosa importante. Java no es sólo un lenguaje de programación.

Bartlomiej Kuczynski
Soluciones para empresas y escalas

La forma correcta de encontrar los mejores desarrolladores Java

Encontrar al desarrollador Java perfecto puede ser una tarea desalentadora. Dado que la demanda del mercado de este tipo de profesionales crece a un ritmo asombroso, las fuentes disponibles para la búsqueda de talentos a veces pueden parecer...

The Codest
Grzegorz Rozmus Jefe de unidad Java

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

    • Oficina 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

    es_ESSpanish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean nl_NLDutch etEstonian elGreek es_ESSpanish