window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() Snelle handleiding voor het uitvoeren van containers vanuit tests - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2022-08-16
Software Ontwikkeling

Snelle handleiding voor het uitvoeren van containers vanuit tests

Bartlomiej Kuczyński

Leer hoe je formuliertesten voor containers uitvoert in ons Java-gerelateerde artikel waarin onze senior Java-ontwikkelaar alle magie laat zien.

Ik gebruik Spring Boot in de project om boilerplate te verminderen. Testcontainers zijn onafhankelijk van Veerraamwerk en je kunt ze ook zonder dat gebruiken.

Ik gebruik Testcontainers versie 1.17.3, maar voel je vrij om de nieuwste te gebruiken. Tests met Postgres container.

Definieer eerst de container:

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

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

  public static Postgres13TC getInstance() {
    TC terug;
  }

  @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
  openbare void stop() {
    // niets doen. Dit is een gedeelde instantie. Laat JVM deze operatie afhandelen.
  }
}

Dan initialiseren we Spring-toepassingscontext. We halen alle gegevensbronconfiguraties op uit de containerinstantie en stellen ze in als Spring-configuratie:

public class ContainerInit implementeert ApplicationContextInitializer {

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

Tot slot kunnen we onze test uitvoeren en wordt alles onder de motorkap gestart:

@SpringBootTest(webomgeving = RANDOM_PORT)
@AutoConfigureTestDatabase(vervangen = GEEN)
@ContextConfiguratie(initializers = ContainerInit.class)
@Testcontainers
klasse DummyRepositoryTest {

  @Autowired
  private DummyRepository dummyRepository;

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

Of als we een Spring onafhankelijke test willen uitvoeren, kunnen we de container direct gebruiken:

@Testcontainers
klasse SimpleDbTest {

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

  @Test
  id testConnection() {
    assumeThat(postgres13TC.isRunning());
    var connectionProps = nieuwe Properties();
    connectionProps.put("user", postgres13TC.getUsername());
    connectionProps.put("wachtwoord", 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);
    } vang (SQLException sqlException) {
    assertThat((Exception) sqlException).doesNotThrowAnyException();
    }
  }
}

Samenvattend

Testcontainers zijn zeer eenvoudig te gebruiken tools die ons helpen om integratietests te maken die Docker-containers gebruiken. Dat geeft ons meer flexibiliteit en verhoogt de ontwikkelingssnelheid. Door de testconfiguratie goed in te stellen, hebben nieuwe ontwikkelaars minder tijd nodig. Ze hoeven niet alle afhankelijkheden in te stellen, maar alleen de geschreven tests uit te voeren met geselecteerde configuratiebestanden.

vaandel samenwerking

Verwante artikelen

Software Ontwikkeling

9 fouten die je moet vermijden bij het programmeren in Java

Welke fouten moet je vermijden bij het programmeren in Java? In het volgende stuk beantwoorden we deze vraag.

The Codest
Rafal Sawicki Java Ontwikkelaar
Oplossingen voor ondernemingen en schaalvergroting

Hoe kan Java uw bedrijf ondersteunen?

Voordat we beginnen, wil ik je aan één belangrijk ding herinneren. Java is niet alleen een programmeertaal.

Bartlomiej Kuczynski
Oplossingen voor ondernemingen en schaalvergroting

De juiste manier om de beste Java-ontwikkelaars te vinden

De perfecte Java-ontwikkelaar vinden kan een ontmoedigende taak zijn. Terwijl de vraag naar dergelijke professionals op de markt razendsnel groeit, lijken de beschikbare bronnen voor het zoeken naar talent soms...

The Codest
Grzegorz Rozmus Java Eenheid Leader

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

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