window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes allerede') } 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 }) }, } } })() Hurtig guide til, hvordan man kører containere fra tests - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2022-08-16
Udvikling af software

Hurtig guide til, hvordan man kører containere fra tests

Bartlomiej Kuczyński

Lær, hvordan du kører containertest i vores Java-relaterede artikel, hvor vores senior java-udvikler viser al magien.

Jeg bruger Spring Boot i projekt for at reducere standardtekster. Testcontainere er uafhængige af Spring Framework og du kan bruge dem uden.

Jeg bruger Testcontainers version 1.17.3, men du er velkommen til at bruge den nyeste. Test med Postgres-container.

Definér først containeren:

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() {
    // gør ingenting. Dette er en delt instans. Lad JVM håndtere denne operation.
  }
}

Initialiser derefter Spring-applikationskonteksten. Vi henter alle datakildekonfigurationer fra containerinstansen og indstiller dem som Spring-konfigurationer:

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

Til sidst kan vi køre vores test, og alt vil blive startet under motorhjelmen:

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

  @Autowired
  privat DummyRepository dummyRepository;

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

Eller hvis vi vil køre en Spring-uafhængig test, kan vi bruge containeren direkte:

@Testcontainere
class SimpleDbTest {

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

  @Test
  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();
    }
  }
}

Opsummering

Testcontainers er meget brugervenlige værktøjer, som hjælper os med at skabe integrationstest, der bruger Docker-containere. Det giver os mere fleksibilitet og øger udviklingshastigheden. Korrekt opsætning af testkonfiguration reducerer den tid, det tager at sætte nye udviklere i gang. De behøver ikke at opsætte alle afhængigheder, de skal bare køre de skrevne tests med udvalgte konfigurationsfiler.

Samarbejdsbanner

Relaterede artikler

Udvikling af software

9 fejl, du skal undgå, når du programmerer i Java

Hvilke fejl bør man undgå, når man programmerer i Java? I det følgende afsnit besvarer vi dette spørgsmål.

Codest
Rafal Sawicki Java-udvikler
Løsninger til virksomheder og scaleups

Hvordan kan Java støtte din virksomhed?

Før vi går i gang, vil jeg gerne minde dig om en vigtig ting. Java er ikke kun et programmeringssprog.

Bartlomiej Kuczynski
Løsninger til virksomheder og scaleups

Den rigtige måde at finde de bedste Java-udviklere på

At finde den perfekte Java-udvikler kan være en skræmmende opgave. Da markedets efterspørgsel efter sådanne fagfolk vokser i et forbløffende tempo, kan de tilgængelige kilder til talentsøgning nogle gange virke...

Codest
Grzegorz Rozmus Leder af Java-enhed

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologiske knudepunkter

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Hjerneambassaden, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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