{"id":3631,"date":"2022-07-26T11:02:35","date_gmt":"2022-07-26T11:02:35","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/test-containers-how-to-make-tests-easier\/"},"modified":"2026-03-11T06:00:15","modified_gmt":"2026-03-11T06:00:15","slug":"testikonteinerid-kuidas-teha-testid-lihtsamaks","status":"publish","type":"post","link":"https:\/\/thecodest.co\/et\/blog\/test-containers-how-to-make-tests-easier\/","title":{"rendered":"Testikonteinerid - kuidas muuta testid lihtsamaks?"},"content":{"rendered":"<p>Kaasaegne rakenduste arendamine p\u00f5hineb \u00fchel lihtsal reeglil:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><b>Kasutage koostist<\/b><\/p>\n<\/blockquote>\n\n\n\n<p>Me koostame klassid, funktsioonid ja teenused suuremateks tarkvarat\u00fckkideks. See viimane element on aluseks <a href=\"https:\/\/thecodest.co\/et\/dictionary\/microservices\/\">mikroteenused<\/a> ja <a href=\"https:\/\/thecodest.co\/et\/blog\/the-power-of-hexagonal-architecture\/\">kuusnurkne arhitektuur<\/a>. Me soovime kasutada olemasolevaid lahendusi, integreerida need meie tarkvaraga ja minna otse \u00fcle <a href=\"https:\/\/thecodest.co\/et\/dictionary\/what-is-the-size-of-your-potential-reachable-market\/\">turg<\/a>.<\/p>\n\n\n\n<p>Kas soovite k\u00e4sitleda konto registreerimist ja salvestada kasutajaid <a href=\"https:\/\/thecodest.co\/et\/blog\/app-data-collection-security-risks-value-and-types-explored\/\">andmed<\/a>? Saate valida \u00fche OAuthi teenustest. V\u00f5ib-olla pakub teie rakendus mingit tellimust v\u00f5i makset? On palju teenuseid, mis aitavad teil sellega toime tulla. Kas teil on vaja oma veebisaidil mingit anal\u00fc\u00fcsi, kuid te ei m\u00f5ista <a href=\"https:\/\/thecodest.co\/et\/blog\/cyber-security-dilemmas-data-leaks\/\">GDPR<\/a>? V\u00f5ta vabalt ja v\u00f5ta \u00fcks valmislahendustest.<\/p>\n\n\n\n<p>Midagi, mis teeb arenduse \u00e4rilisest vaatenurgast nii lihtsaks, v\u00f5ib teile peavalu valmistada - hetkel, kui teil on vaja kirjutada lihtne test.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fantastilised elukad: J\u00e4rjekorrad, andmebaasid ja nende testimine<\/h2>\n\n\n\n<p>\u00dchiktestimine on \u00fcsna lihtne. Kui te j\u00e4rgite ainult neid reegleid, siis teie testkeskkond ja <a href=\"https:\/\/thecodest.co\/et\/dictionary\/what-is-code-refactoring\/\">kood<\/a> on terved. Millised on need reeglid?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>Lihtne kirjutada<\/b> - \u00fchikteste peaks olema lihtne kirjutada, sest neid kirjutatakse palju. V\u00e4hem vaeva t\u00e4hendab, et teste kirjutatakse rohkem.<\/li>\n\n\n\n<li><b>Loetav<\/b> - testkood peaks olema kergesti loetav. Test on lugu. See kirjeldab tarkvara k\u00e4itumist ja seda v\u00f5ib kasutada dokumentatsiooni l\u00fchendina. Hea \u00fchiktest aitab parandada vigu ilma koodi silumata.<\/li>\n\n\n\n<li><b>Usaldusv\u00e4\u00e4rne<\/b> - test peaks eba\u00f5nnestuma ainult siis, kui testitavas s\u00fcsteemis on viga. Ilmselt? Mitte alati. M\u00f5nikord l\u00e4hevad testid l\u00e4bi, kui neid \u00fckshaaval k\u00e4ivitada, kuid eba\u00f5nnestuvad, kui neid k\u00e4ivitada komplektina. Nad l\u00e4hevad teie masinas l\u00e4bi, kuid CI-s eba\u00f5nnestuvad (<a href=\"https:\/\/blog.codinghorror.com\/the-works-on-my-machine-certification-program\/\">T\u00f6\u00f6tab minu masinas<\/a>). Heal \u00fchiktestil on ainult \u00fcks eba\u00f5nnestumise p\u00f5hjus.<\/li>\n\n\n\n<li><b>Kiire<\/b> - testid peaksid olema kiired. Testide ettevalmistamine, k\u00e4ivitamine ja testide teostamine peaks olema v\u00e4ga kiire. Vastasel juhul te kirjutate neid, kuid mitte k\u00e4ivitate neid. Aeglased testid t\u00e4hendavad kadunud fookust. Sa ootad ja vaatad eduriba.<\/li>\n\n\n\n<li><b>S\u00f5ltumatu<\/b> - l\u00f5puks peaks test olema s\u00f5ltumatu. See reegel tuleneb eelmistest. Ainult t\u00f5eliselt s\u00f5ltumatud testid v\u00f5ivad saada \u00fchikuks. Nad ei sega \u00fcksteist, neid saab k\u00e4ivitada mis tahes j\u00e4rjekorras ja v\u00f5imalikud vead ei s\u00f5ltu teiste testide tulemustest. S\u00f5ltumatus t\u00e4hendab ka seda, et nad ei s\u00f5ltu mis tahes v\u00e4listest ressurssidest, nagu andmebaasid, s\u00f5numiteenused v\u00f5i failis\u00fcsteem. Kui teil on vaja suhelda v\u00e4liste vahenditega, v\u00f5ite kasutada mockisid, stubisid v\u00f5i dummy'sid.<\/li>\n<\/ul>\n\n\n\n<p>K\u00f5ik muutub keeruliseks, kui tahame kirjutada m\u00f5ned integratsioonitestid. See ei ole paha, kui me tahame testida paar teenust koos. Aga kui meil on vaja testida teenuseid, mis kasutavad v\u00e4liseid ressursse, nagu andmebaasid v\u00f5i s\u00f5numiteenused, siis me k\u00fcsime probleeme.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testi l\u00e4biviimiseks peate installima...<\/h3>\n\n\n\n<p>Aastaid tagasi, kui tahtsime teha integratsiooniteste ja kasutada n\u00e4iteks andmebaase, oli meil kaks v\u00f5imalust:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Me v\u00f5ime paigaldada andmebaasi lokaalselt. Seadistame skeemi ja \u00fchendame selle meie testist;<\/li>\n\n\n\n<li>Me saame \u00fchendada olemasoleva instantsi \"kusagil kosmoses\".<\/li>\n<\/ol>\n\n\n\n<p>M\u00f5lemal olid plussid, m\u00f5lemal olid miinused. Kuid m\u00f5lemad toovad kaasa t\u00e4iendava keerukuse. M\u00f5nikord oli see tehniline keerukus, mis tulenes teatavate vahendite omadustest, nt Oracle DB paigaldamine ja haldamine teie localhostil. M\u00f5nikord oli see ebamugavus protsessis, nt tuleb kokku leppida testi <a href=\"https:\/\/thecodest.co\/et\/dictionary\/how-to-lead-software-development-team\/\">meeskond<\/a> JMS-i kasutamise kohta... iga kord, kui soovite teste k\u00e4ivitada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Konteinerid p\u00e4\u00e4stmiseks<\/h3>\n\n\n\n<p>Viimase 10 aasta jooksul on konteinerite idee saanud t\u00f6\u00f6stuses tunnustust. Seega on loomulik otsus valida konteinerid lahendusena meie integratsioonitesti probleemile. See on lihtne ja puhas lahendus. Te lihtsalt k\u00e4ivitate oma protsessi buildi ja k\u00f5ik toimib! Te ei suuda seda uskuda? Vaadake seda lihtsat maven buildi konfiguratsiooni:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml\">com.dkanejs.maven.plugins\n     docker-compose-maven-plugin\n     4.0.0\n     \n       \n         up\n         test-compile\n         \n           up\n         \n         \n           ${<a href=\"https:\/\/thecodest.co\/et\/dictionary\/why-do-projects-fail\/\">projekt<\/a>.basedir}\/docker-compose.yml\n           true\n         \n       \n       \n         down\n         post-integration-test\n         \n           down\n         \n         \n           ${project.basedir}\/docker-compose.yml\n           true<\/code><\/pre>\n\n\n\n<p>Ja <code>docker-compose.yml<\/code> fail n\u00e4eb ka p\u00e4ris kena v\u00e4lja!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">versioon: \"3.5\"\n\nteenused:\n\n postgres:\n   reactivedb\n   image: postgres:13.2\n   restart: always\n   keskkond: postrestgres: a)\n     - POSTGRES_USER=admin\n     - POSTGRES_PASSWORD=password\n     - POSTGRES_DB=linnad\n   Pordid:\n     - \"5432:5432\"\n   mahud:\n     - postgres_data:\/data\/db\n\n pgadmin:\n   konteineri_nimi: pgadmin4\n   image: dpage\/pgadmin4\n   restart: always\n   environment:\n     PGADMIN_DEFAULT_EMAIL: admin@admin.com\n     PGADMIN_DEFAULT_PASSWORD: password\n   Pordid:\n     - \"15050:80\"\n   mahud:\n     - pgadmin_data:\/data\/pgadmin\n\nmahud:\n postgres_data:\n pgadmin_data:<\/code><\/pre>\n\n\n\n<p>Aga kas te oskate siinkohal probleemi tuvastada?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kaubalaev, mis blokeerib k\u00f5ik<\/h3>\n\n\n\n<p>\u00dclaltoodud n\u00e4ide on v\u00e4ga lihtne. Ainult \u00fcks postgres'i andmebaas, pgAdmin ja see on k\u00f5ik. Kui te k\u00e4ivitate<\/p>\n\n\n\n<p><code>bash<br>\n$ mvn clean verify<br>\n<\/code><br>siis k\u00e4ivitab maven plugin konteinerid ja p\u00e4rast teste l\u00fclitab need v\u00e4lja. Probleemid algavad siis, kui projekt kasvab ja ka meie kompositsioonifail kasvab. Iga kord tuleb k\u00e4ivitada k\u00f5ik konteinerid ja nad j\u00e4\u00e4vad kogu buildi jooksul ellu. Olukorda saab veidi parandada, kui muuta pluginate t\u00e4itmise konfiguratsiooni, kuid sellest ei piisa. Halvimal juhul ammendavad teie konteinerid s\u00fcsteemi ressursid enne testide k\u00e4ivitamist!<\/p>\n\n\n\n<p>Ja see ei ole ainus probleem. Te ei saa oma IDE-st k\u00e4ivitada \u00fchtegi integratsioonitesti. Enne seda tuleb konteinerid k\u00e4sitsi k\u00e4ivitada. Lisaks sellele lammutab j\u00e4rgmine maven'i k\u00e4ivitamine need konteinerid (vaadake <code>alla<\/code> t\u00e4itmine).<\/p>\n\n\n\n<p>Seega on see lahendus nagu suur kaubalaev. Kui k\u00f5ik toimib h\u00e4sti, siis on k\u00f5ik ok. Iga ootamatu v\u00f5i ebatavaline k\u00e4itumine viib <a href=\"https:\/\/thecodest.co\/et\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a> mingi katastroofini.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testkonteinerid - testide konteinerite k\u00e4ivitamine<\/h2>\n\n\n\n<p>Aga mis oleks, kui me saaksime oma konteinereid testidest k\u00e4ivitada? See idee tundub hea ja seda on juba rakendatud. <a href=\"https:\/\/www.testcontainers.org\/\" rel=\"nofollow\">Testkonteinerid<\/a>, sest me r\u00e4\u00e4gime sellest projektist, siin on lahendus meie probleemidele. Ei ole ideaalne, kuid keegi ei ole t\u00e4iuslik.<\/p>\n\n\n\n<p>See on <strong><a href=\"https:\/\/thecodest.co\/et\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a><\/strong> raamatukogu, mis toetab JUnit ja Spock teste, pakkudes kerget ja lihtsat v\u00f5imalust k\u00e4ivitada <a href=\"https:\/\/thecodest.co\/et\/dictionary\/docker-developer\/\">Docker<\/a> konteiner. Vaatame seda ja kirjutame koodi!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eeldused ja konfiguratsioon<\/h3>\n\n\n\n<p>Enne alustamist peame kontrollima oma konfiguratsiooni. <strong>Testimismahutid<\/strong> vajadus:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker versioonis v17.09,<\/li>\n\n\n\n<li>Java minimaalne versioon 1.8,<\/li>\n\n\n\n<li>Juurdep\u00e4\u00e4s v\u00f5rgule, eriti docker.hubile.<\/li>\n<\/ul>\n\n\n\n<p>Rohkem teavet konkreetsete operatsioonis\u00fcsteemide ja CI n\u00f5uete kohta leiate j\u00e4rgmiselt.<br>aadressil <a href=\"https:\/\/www.testcontainers.org\/supported_docker_environment\/\" rel=\"nofollow\">dokumentatsioon<\/a>.<\/p>\n\n\n\n<p>N\u00fc\u00fcd on aeg lisada m\u00f5ned read, et <code>pom.xml<\/code>.<\/p>\n\n\n\n<aside>Ma kasutan projektis spring boot'i, et v\u00e4hendada boilerplate'i. <strong>Testimismahutid<\/strong> on Spring Frameworkist s\u00f5ltumatud ja neid saab kasutada ka ilma selleta.<\/aside>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml\"><s>\n   <s>\n     <s>\n       org.testcontainers\n       testcontainers-bom\n       ${testcontaines.version}\n       pom\n       import\n     \n   \n \n \n   \n     org.postgresql\n     postgresql\n     runtime\n   \n   <s>\n     org.testcontainers\n     postgresql\n     test\n   \n   \n     org.testcontainers\n     junit-jupiter\n     test<\/code><\/pre>\n\n\n\n<p>Ma kasutan <strong>Testimismahutid<\/strong> versioon <code>1.17.3<\/code>, kuid v\u00f5ite vabalt kasutada uusimat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testid Postgres konteineriga<\/h3>\n\n\n\n<p>Esimene samm on meie konteineri instantsi ettevalmistamine. Seda v\u00f5ib teha otse testis, kuid iseseisev klass tundub parem.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">public class Postgres13TC extends PostgreSQLContainer {\n\n private static final Postgres13TC TC = new Postgres13TC();\n\n private Postgres13TC() {\n   super(\"postgres:13.2\");\n }\n\n public static Postgres13TC getInstance() {\n   return TC;\n }\n\n @Override\n public void start() {\n   super.start();\n   System.setProperty(\"DB_URL\", TC.getJdbcUrl());\n   System.setProperty(\"DB_USERNAME\", TC.getUsername());\n   System.setProperty(\"DB_PASSWORD\", TC.getPassword());\n }\n\n @Override\n public void stop() {\n   \/\/ ei tee midagi. See on jagatud instants. Las JVM tegeleb selle toiminguga.\n }\n}\n<\/code><\/pre>\n\n\n\n<p>Testide alguses loome instantsi <code>Postgres13TC<\/code>. See klass saab k\u00e4sitleda teavet meie konteineri kohta. K\u00f5ige olulisemad on siin andmebaasi\u00fchenduste stringid ja volikirjaandmed. N\u00fc\u00fcd on aeg kirjutada v\u00e4ga lihtne test.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">@Testikonteinerid\nclass SimpleDbTest {\n\n @Container\n private static Postgres13TC = Postgres13TC.getInstance();\n\n @Test\n void testConnection() {\n   assumeThat(postgres13TC.isRunning());\n   var connectionProps = new Properties();\n   connectionProps.put(\"user\", postgres13TC.getUsername());\n   connectionProps.put(\"password\", postgres13TC.getPassword());\n\n   try (Connection = DriverManager.getConnection(postgres13TC.getJdbcUrl(),\n       connectionProps)) {\n     var resultSet = connection.prepareStatement(\"Select 1\").executeQuery();\n     resultSet.next();\n     assertThat(resultSet.getInt(1)).isEqualTo(1);\n   } catch (SQLException sqlException) {\n     assertThat((Exception) sqlException).doesNotThrowAnyException();\n   }\n }\n}<\/code><\/pre>\n\n\n\n<p>Ma kasutan siin JUnit 5. Annotatsioon <code>@Testikonteinerid<\/code> on osa laiendustest, mis kontrollivad konteinereid testkeskkonnas. Nad leiavad k\u00f5ik v\u00e4ljad koos <code>@Konteiner<\/code> m\u00e4rkus ja vastavalt start- ja stop-konteinerid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testid Spring Bootiga<\/h3>\n\n\n\n<p>Nagu ma juba mainisin, kasutan projektis Spring Boot'i. Sel juhul tuleb kirjutada veidi rohkem koodi. Esimene samm on luua t\u00e4iendav konfiguratsiooniklass.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">@Slf4j\npublic class ContainerInit rakendab\n   ApplicationContextInitializer {\n\n public static Postgres13TC;\n\n static {\n   postgres13TC = Postgres13TC.getInstance();\n   postgres13TC.start();\n }\n\n @Override\n public void initialize(ConfigurableApplicationContext applicationContext) {\n   TestPropertySourceUtils.addInlinedPropertiesToEnvironment(\n       applicationContext,\n       \"spring.datasource.url=\" + postgres13TC.getJdbcUrl(),\n       \"spring.datasource.username=\" + postgres13TC.getUsername(),\n       \"spring.datasource.password=\" + postgres13TC.getPassword(),\n       \"db.host=\" + postgres13TC.getHost(),\n       \"db.port=\" + postgres13TC.getMappedPort(postgres13TC.POSTGRESQL_PORT),\n       \"db.name=\" + postgres13TC.getDatabaseName(),\n       \"db.username=\" + postgres13TC.getUsername(),\n       \"db.password=\" + postgres13TC.getPassword()\n   );\n }\n}<\/code><\/pre>\n\n\n\n<p>See klass t\u00fchistab olemasolevad omadused v\u00e4\u00e4rtustega, mis p\u00e4rinevad klassist <strong>testkonteiner<\/strong>. Esimesed kolm omadust on tavalised Springi omadused. J\u00e4rgmised viis on t\u00e4iendavad, kohandatud omadused, mida saab kasutada teiste ressursside ja laienduste, n\u00e4iteks liquibase'i konfigureerimiseks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"properties\" class=\"language-properties\">spring.liquibase.change-log=classpath:\/db\/changelog\/dbchangelog.xml\nspring.liquibase.url=jdbc:postgresql:\/\/${db.host:localhost}:${db.port:5432}\/${db.name:cities}\nspring.liquibase.user=${db.kasutajanimi:admin}\nspring.liquibase.password=${db.password:password}\nspring.liquibase.enabled=true<\/code><\/pre>\n\n\n\n<p>N\u00fc\u00fcd on aeg m\u00e4\u00e4ratleda lihtne integratsioonitest.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">@SpringBootTest(webEnvironment = RANDOM_PORT)\n@AutoConfigureTestDatabase(replace = NONE)\n@ContextConfiguration(initializers = ContainerInit.class)\n@Testikonteinerid\nclass DummyRepositoryTest {\n\n @Autowired\n private DummyRepository;\n\n @Test\n void shouldReturnDummy() {\n   var byId = dummyRepository.getById(10L);\n   var expected = new Dummy();\n   expected.setId(10L);\n   assertThat(byId).completes().emitsCount(1).emits(expected);\n }\n}<\/code><\/pre>\n\n\n\n<p>Meil on siin m\u00f5ned lisam\u00e4rkused.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>@SpringBootTest(webEnvironment = RANDOM_PORT)<\/code> - t\u00e4histab testi kui Spring Boot testi ja k\u00e4ivitab Springi konteksti.<\/li>\n\n\n\n<li><code>@AutoConfigureTestDatabase(replace = NONE)<\/code> - need m\u00e4rked \u00fctlevad, et spring test laiendus ei tohiks asendada postgres andmebaasi konfiguratsiooni H2 m\u00e4lu konfiguratsiooniga.<\/li>\n\n\n\n<li><code>@ContextConfiguration(initializers = ContainerInit.class)<\/code> - t\u00e4iendav kevadine kontekst<br>konfiguratsioon, kus me seadistame omadused alates <strong>Testimismahutid<\/strong>.<\/li>\n\n\n\n<li><code>@Testikonteinerid<\/code> - nagu eelnevalt mainitud, kontrollib see m\u00e4rkus konteineri eluts\u00fcklit.<\/li>\n<\/ul>\n\n\n\n<p>Selles n\u00e4ites kasutan ma reaktiivseid repositooriume, kuid see toimib samamoodi ka tavaliste JDBC- ja JPA-repositooriumidega.<\/p>\n\n\n\n<p>N\u00fc\u00fcd saame selle testi k\u00e4ivitada. Kui tegemist on esimese k\u00e4ivitamisega, peab mootor t\u00f5mbama kujutised docker.hubist. See v\u00f5ib v\u00f5tta hetke. P\u00e4rast seda n\u00e4eme, et kaks konteinerit on k\u00e4ivitunud. \u00dcks on postgres ja teine on Testcontainers kontroller. See teine konteiner haldab jooksvaid konteinereid ja isegi kui JVM ootamatult peatub, siis ta l\u00fclitab konteinerid v\u00e4lja ja koristab keskkonna.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">V\u00f5tame kokku<\/h2>\n\n\n\n<p><strong>Testimismahutid<\/strong> on v\u00e4ga lihtsalt kasutatavad t\u00f6\u00f6riistad, mis aitavad meil luua integratsiooniteste, mis kasutavad Dockeri konteinereid. See annab meile rohkem paindlikkust ja suurendab arenduskiirust. Testi konfiguratsiooni \u00f5ige seadistamine v\u00e4hendab uute arendajate pardaloleku aega. Nad ei pea seadistama k\u00f5iki s\u00f5ltuvusi, vaid lihtsalt k\u00e4ivitama kirjutatud testid valitud konfiguratsioonifailidega.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/interested_in_cooperation_.png\" alt=\"koost\u00f6\u00f6b\u00e4nner\"\/><\/a><\/figure>","protected":false},"excerpt":{"rendered":"<p>Kas otsite v\u00f5imalust teha teste lihtsamalt? Meil on teid! Vaadake j\u00e4rgmist artiklit ja \u00f5ppige, kuidas seda teha.<\/p>","protected":false},"author":2,"featured_media":3632,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3631","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Test Containers \u2013 How to Make Tests Easier? - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/et\/blogi\/testikonteinerid-kuidas-teha-testid-lihtsamaks\/\" \/>\n<meta property=\"og:locale\" content=\"et_EE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test Containers \u2013 How to Make Tests Easier?\" \/>\n<meta property=\"og:description\" content=\"Are you looking for a way to make tests in an easier way? We got you! Check the following article and learn how to make it possible.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/et\/blogi\/testikonteinerid-kuidas-teha-testid-lihtsamaks\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-26T11:02:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-11T06:00:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/test_containers_-_how_to_make_tests_easier_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Test Containers \u2013 How to Make Tests Easier?\",\"datePublished\":\"2022-07-26T11:02:35+00:00\",\"dateModified\":\"2026-03-11T06:00:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/\"},\"wordCount\":1399,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/test_containers_-_how_to_make_tests_easier_.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"et\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/\",\"name\":\"Test Containers \u2013 How to Make Tests Easier? - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/test_containers_-_how_to_make_tests_easier_.png\",\"datePublished\":\"2022-07-26T11:02:35+00:00\",\"dateModified\":\"2026-03-11T06:00:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#breadcrumb\"},\"inLanguage\":\"et\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/test_containers_-_how_to_make_tests_easier_.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/test_containers_-_how_to_make_tests_easier_.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/test-containers-how-to-make-tests-easier\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test Containers \u2013 How to Make Tests Easier?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"et\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/et\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Testikonteinerid - kuidas muuta testid lihtsamaks? - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/et\/blogi\/testikonteinerid-kuidas-teha-testid-lihtsamaks\/","og_locale":"et_EE","og_type":"article","og_title":"Test Containers \u2013 How to Make Tests Easier?","og_description":"Are you looking for a way to make tests in an easier way? We got you! Check the following article and learn how to make it possible.","og_url":"https:\/\/thecodest.co\/et\/blogi\/testikonteinerid-kuidas-teha-testid-lihtsamaks\/","og_site_name":"The Codest","article_published_time":"2022-07-26T11:02:35+00:00","article_modified_time":"2026-03-11T06:00:15+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/test_containers_-_how_to_make_tests_easier_.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Test Containers \u2013 How to Make Tests Easier?","datePublished":"2022-07-26T11:02:35+00:00","dateModified":"2026-03-11T06:00:15+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/"},"wordCount":1399,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/test_containers_-_how_to_make_tests_easier_.png","articleSection":["Software Development"],"inLanguage":"et","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/","url":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/","name":"Testikonteinerid - kuidas muuta testid lihtsamaks? - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/test_containers_-_how_to_make_tests_easier_.png","datePublished":"2022-07-26T11:02:35+00:00","dateModified":"2026-03-11T06:00:15+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#breadcrumb"},"inLanguage":"et","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/"]}]},{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/test_containers_-_how_to_make_tests_easier_.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/test_containers_-_how_to_make_tests_easier_.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Test Containers \u2013 How to Make Tests Easier?"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"et"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/et\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/comments?post=3631"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3631\/revisions"}],"predecessor-version":[{"id":8016,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3631\/revisions\/8016"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/media\/3632"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/media?parent=3631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/categories?post=3631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/tags?post=3631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}