The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2022-08-16
Desenvolvimento de software

Guia rápido sobre como executar contêineres a partir de testes

Bartlomiej Kuczyński

Saiba como executar testes de formulários de contentores no nosso artigo relacionado com Java, onde o nosso programador java sénior mostra toda a magia.

Eu uso Spring Boot no projeto para reduzir os clichés. Os contentores de teste são independentes de Estrutura da primavera e pode utilizá-los sem isso.

Utilizo a versão 1.17.3 do Testcontainers, mas pode utilizar a mais recente. Testes com o contentor Postgres.

Primeiro, definir o contentor:

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_USERNAME", TC.getUsername());
    System.setProperty("DB_PASSWORD", TC.getPassword());
  }

  @Override
  public void stop() {
    // não faz nada. Esta é uma instância partilhada. Deixe a JVM lidar com esta operação.
  }
}

Em seguida, inicializamos o contexto da aplicação Spring. Obtemos todas as configurações da fonte de dados da instância do contentor e definimo-las como configuração do Spring:

public class ContainerInit implements ApplicationContextInitializer {

  public static Postgres13TC postgres13TC;

  estático {
    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()
    );
  }
}

Finalmente, podemos executar o nosso teste, e tudo será iniciado sob o capô:

@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(replace = NONE)
@ContextConfiguration(initializers = ContainerInit.class)
@ContentoresTeste
classe DummyRepositoryTest {

  @Autowired
  private DummyRepository dummyRepository;

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

Ou, se quisermos executar um teste independente do Spring, podemos utilizar diretamente o contentor:

@Testcontainers
classe SimpleDbTest {

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

  @Teste
  void testConnection() {
    assumeThat(postgres13TC.isRunning());
    var connectionProps = new Properties();
    connectionProps.put("user", postgres13TC.getUsername());
    connectionProps.put("password", 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();
    }
  }
}

Resumindo

Os contentores de teste são ferramentas muito fáceis de utilizar que ajudam nós para criar testes de integração que utilizam Docker contentores. Isto dá-nos mais flexibilidade e aumenta a velocidade de desenvolvimento. A definição correta da configuração dos testes reduz o tempo necessário para integrar novos programadores. Eles não precisam de configurar todas as dependências, basta executar os testes escritos com os ficheiros de configuração selecionados.

faixa de cooperação

Artigos relacionados

Desenvolvimento de software

9 erros a evitar ao programar em Java

Que erros devem ser evitados ao programar em Java? No artigo seguinte, respondemos a esta pergunta.

The Codest
Rafal Sawicki Programador Java
Soluções para empresas e escalas

Como é que Java pode apoiar o seu negócio?

Antes de começarmos, gostaria de vos recordar um aspeto importante. Java não é apenas uma linguagem de programação.

Bartlomiej Kuczynski
Soluções para empresas e escalas

A forma correta de encontrar os melhores programadores Java

Encontrar o programador Java perfeito pode ser uma tarefa difícil. Como a procura de tais profissionais no mercado cresce a um ritmo espantoso, as fontes disponíveis para a procura de talentos podem, por vezes, parecer...

The Codest
Grzegorz Rozmus Líder de unidade Java

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

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

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

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