CINXE.COM
Testcontainers for Java
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="canonical" href="https://java.testcontainers.org/"> <link rel="icon" href="favicon.ico"> <meta name="generator" content="mkdocs-1.3.0, mkdocs-material-8.1.3"> <title>Testcontainers for Java</title> <link rel="stylesheet" href="assets/stylesheets/main.edf004c2.min.css"> <link rel="stylesheet" href="assets/stylesheets/palette.e6a45f82.min.css"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback"> <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> <link rel="stylesheet" href="css/extra.css"> <link rel="stylesheet" href="css/tc-header.css"> <script>__md_scope=new URL(".",location),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "e44a95720257486eab94698a6b4c6ca6"}'></script><!-- End Cloudflare Web Analytics --> <link href="https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600&display=swap" rel="stylesheet"> <script rel="text/javascript" src="/js/tc-header.js" defer></script> </head> <body dir="ltr" data-md-color-scheme="testcontainers" data-md-color-primary="" data-md-color-accent=""> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#testcontainers-for-java" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <!-- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> <!-- Determine base classes --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display: none"> <symbol id="icon-external" viewBox="0 0 15 17" width="15" height="17" fill="currentColor"> <path d="M9.334 1.254a.999.999 0 1 0 0 2h1.584l-5.29 5.293a1.002 1.002 0 0 0 1.415 1.416l5.29-5.294v1.585a.999.999 0 1 0 2 0v-4c0-.553-.446-1-1-1h-4Zm-6.5 1a2.5 2.5 0 0 0-2.5 2.5v8a2.5 2.5 0 0 0 2.5 2.5h8a2.5 2.5 0 0 0 2.5-2.5v-2.5a.999.999 0 1 0-2 0v2.5c0 .275-.226.5-.5.5h-8a.501.501 0 0 1-.5-.5v-8c0-.275.224-.5.5-.5h2.5a.999.999 0 1 0 0-2h-2.5Z" /> </symbol> <symbol id="icon-caret" width="10" height="10" viewBox="0 0 10 10" fill="currentColor"> <path d="M.487 2.157a1.662 1.662 0 0 1 2.357 0L5 4.313l2.156-2.156a1.657 1.657 0 0 1 2.354 0 1.657 1.657 0 0 1 0 2.354L6.177 7.847a1.66 1.66 0 0 1-1.815.36 1.658 1.658 0 0 1-.54-.361L.487 4.51a1.66 1.66 0 0 1 .001-2.353Z" /> </symbol> <symbol id="icon-slack" class="icon-slack" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor"> <path d="M8.76.06a2.392 2.392 0 0 0-2.207 3.309A2.392 2.392 0 0 0 8.76 4.847h2.39V2.453A2.392 2.392 0 0 0 8.76.06Zm0 6.384H2.39A2.392 2.392 0 0 0 .18 9.753a2.392 2.392 0 0 0 2.208 1.479h6.372a2.391 2.391 0 0 0 2.208-3.31 2.39 2.39 0 0 0-2.208-1.478ZM23.893 8.837a2.392 2.392 0 0 0-3.304-2.21 2.392 2.392 0 0 0-1.474 2.21v2.395h2.39a2.391 2.391 0 0 0 2.388-2.395Zm-6.371 0V2.453a2.39 2.39 0 1 0-4.779 0v6.384a2.39 2.39 0 1 0 4.779 0ZM15.133 24a2.391 2.391 0 0 0 2.389-2.394 2.39 2.39 0 0 0-2.39-2.394h-2.389v2.394A2.39 2.39 0 0 0 15.133 24Zm0-6.384h6.371a2.39 2.39 0 0 0 2.39-2.394 2.392 2.392 0 0 0-2.39-2.394h-6.372a2.391 2.391 0 0 0-2.389 2.394 2.39 2.39 0 0 0 2.39 2.394ZM0 15.222a2.391 2.391 0 0 0 4.08 1.691 2.391 2.391 0 0 0 .699-1.691v-2.394h-2.39A2.392 2.392 0 0 0 0 15.222m6.372 0v6.384a2.391 2.391 0 0 0 3.304 2.211 2.39 2.39 0 0 0 1.474-2.211v-6.384a2.392 2.392 0 0 0-2.39-2.394 2.391 2.391 0 0 0-2.388 2.394" /> </symbol> <symbol id="icon-github" class="icon-github" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor"> <path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57C20.565 21.795 24 17.295 24 12c0-6.63-5.37-12-12-12Z" /> </symbol> </svg> <header id="site-header"> <div class="brand"> <a href="https://testcontainers.com/" class="logo"> <img src="/testcontainers-logo.svg" alt="Testcontainers" width="183" height="48"/> </a> <button id="mobile-menu-toggle"> Menu <svg width="30" height="30" viewBox="0 0 30 30" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <rect y="22" width="30" height="4" rx="2"/> <rect y="13" width="30" height="4" rx="2"/> <rect y="4" width="30" height="4" rx="2"/> </svg> </button> </div> <nav> <ul class="menu"> <li class="menu-item"> <a href="https://testcontainers.com/desktop/"> Desktop <span class="badge rounded-pill">NEW</span> </a> </li> <li class="menu-item"> <a href="https://testcontainers.com/cloud/"> Cloud </a> </li> <li class="menu-item"> <a href="https://testcontainers.com/getting-started/"> Getting Started </a> </li> <li class="menu-item"> <a href="https://testcontainers.com/guides/"> Guides </a> </li> <li class="menu-item"> <a href="https://testcontainers.com/modules/"> Modules </a> </li> <li class="menu-item has-children"> <button> Docs <svg class="icon-caret" width="10" height="10" viewBox="0 0 10 10"> <use href="#icon-caret"></use> </svg> </button> <ul class="menu-dropdown"> <li class="menu-dropdown-item"> <a href="https://java.testcontainers.org/" > <img src="/language-logos/java.svg" alt="" width="24" height="24"/> Testcontainers for Java </a> </li> <li class="menu-dropdown-item"> <a href="https://golang.testcontainers.org/" > <img src="/language-logos/go.svg" alt="" width="24" height="24"/> Testcontainers for Go </a> </li> <li class="menu-dropdown-item"> <a href="https://dotnet.testcontainers.org/" > <img src="/language-logos/dotnet.svg" alt="" width="24" height="24"/> Testcontainers for .NET </a> </li> <li class="menu-dropdown-item"> <a href="https://node.testcontainers.org/" > <img src="/language-logos/nodejs.svg" alt="" width="24" height="24"/> Testcontainers for Node.js </a> </li> <li class="menu-dropdown-item"> <a href="https://testcontainers-python.readthedocs.io/en/latest/" target="_blank"> <img src="/language-logos/python.svg" alt="" width="24" height="24"/> Testcontainers for Python <svg class="icon-external" width="15" height="17" viewBox="0 0 15 17" aria-hidden="true" focusable="false"> <use href="#icon-external"></use> </svg> </a> </li> <li class="menu-dropdown-item"> <a href="https://docs.rs/testcontainers/latest/testcontainers/" target="_blank"> <img src="/language-logos/rust.svg" alt="" width="24" height="24"/> Testcontainers for Rust <svg class="icon-external" width="15" height="17" viewBox="0 0 15 17" aria-hidden="true" focusable="false"> <use href="#icon-external"></use> </svg> </a> </li> <li class="menu-dropdown-item"> <a href="https://github.com/testcontainers/testcontainers-hs" target="_blank"> <img src="/language-logos/haskell.svg" alt="" width="24" height="24"/> Testcontainers for Haskell <svg class="icon-external" width="15" height="17" viewBox="0 0 15 17" aria-hidden="true" focusable="false"> <use href="#icon-external"></use> </svg> </a> </li> <li class="menu-dropdown-item"> <a href="https://github.com/testcontainers/testcontainers-ruby" target="_blank"> <img src="/language-logos/ruby.svg" alt="" width="24" height="24"/> Testcontainers for Ruby <svg class="icon-external" width="15" height="17" viewBox="0 0 15 17" aria-hidden="true" focusable="false"> <use href="#icon-external"></use> </svg> </a> </li> </ul> </li> <li class="menu-item"> <a href="https://slack.testcontainers.org/"> <svg class="icon-slack" width="24" height="24" viewBox="0 0 24 24"> <use href="#icon-slack"></use> </svg> Slack </a> </li> <li class="menu-item"> <a href="https://github.com/testcontainers"> <svg class="icon-github" width="24" height="24" viewBox="0 0 24 24"> <use href="#icon-github"></use> </svg> GitHub </a> </li> </ul> </nav> </header> <!-- Header --> <header class="md-header md-header--shadow" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="" > <!-- Button to open drawer --> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> </label> <!-- Header title --> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <a href="."> <span class="md-ellipsis"> Testcontainers for Java </span> </a> </div> </div> </div> <!-- Color palette --> <!-- Site language selector --> <!-- Button to open search modal --> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> </label> <!-- Search interface --> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> </button> </nav> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list"></ol> </div> </div> </div> </div> </div> <!-- Repository information --> <div class="md-header__source"> <a href="https://github.com/testcontainers/testcontainers-java" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class="md-source__repository"> testcontainers-java </div> </a> </div> </nav> <!-- Navigation tabs (sticky) --> </header> <div class="md-container" data-md-component="container"> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <!-- Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> <!-- Determine class according to configuration --> <!-- Main navigation --> <nav class="md-nav md-nav--primary" aria-label="" data-md-level="0"> <!-- Site title --> <label class="md-nav__title" for="__drawer"> Content </label> <!-- Repository information --> <div class="md-nav__source"> <a href="https://github.com/testcontainers/testcontainers-java" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class="md-source__repository"> testcontainers-java </div> </a> </div> <!-- Render item list --> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> Home <span class="md-nav__icon md-icon"></span> </label> <a href="." class="md-nav__link md-nav__link--active"> Home </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#about-testcontainers-for-java" class="md-nav__link"> About Testcontainers for Java </a> </li> <li class="md-nav__item"> <a href="#prerequisites" class="md-nav__link"> Prerequisites </a> </li> <li class="md-nav__item"> <a href="#maven-dependencies" class="md-nav__link"> Maven dependencies </a> <nav class="md-nav" aria-label="Maven dependencies"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#managing-versions-for-multiple-testcontainers-dependencies" class="md-nav__link"> Managing versions for multiple Testcontainers dependencies </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#sponsors" class="md-nav__link"> Sponsors </a> <nav class="md-nav" aria-label="Sponsors"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#bronze-sponsors" class="md-nav__link"> Bronze sponsors </a> </li> <li class="md-nav__item"> <a href="#donors" class="md-nav__link"> Donors </a> </li> <li class="md-nav__item"> <a href="#backers" class="md-nav__link"> Backers </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#who-is-using-testcontainers" class="md-nav__link"> Who is using Testcontainers? </a> </li> <li class="md-nav__item"> <a href="#license" class="md-nav__link"> License </a> </li> <li class="md-nav__item"> <a href="#attributions" class="md-nav__link"> Attributions </a> </li> <li class="md-nav__item"> <a href="#copyright" class="md-nav__link"> Copyright </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2"> Quickstart <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Quickstart" data-md-level="1"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Quickstart </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="quickstart/junit_4_quickstart/" class="md-nav__link"> JUnit 4 Quickstart </a> </li> <li class="md-nav__item"> <a href="quickstart/junit_5_quickstart/" class="md-nav__link"> JUnit 5 Quickstart </a> </li> <li class="md-nav__item"> <a href="quickstart/spock_quickstart/" class="md-nav__link"> Spock Quickstart </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" > <label class="md-nav__link" for="__nav_3"> Features <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Features" data-md-level="1"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> Features </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="features/creating_container/" class="md-nav__link"> Creating a container </a> </li> <li class="md-nav__item"> <a href="features/networking/" class="md-nav__link"> Networking and communicating with containers </a> </li> <li class="md-nav__item"> <a href="features/commands/" class="md-nav__link"> Executing commands </a> </li> <li class="md-nav__item"> <a href="features/files/" class="md-nav__link"> Files and volumes </a> </li> <li class="md-nav__item"> <a href="features/startup_and_waits/" class="md-nav__link"> Waiting for containers to start or be ready </a> </li> <li class="md-nav__item"> <a href="features/container_logs/" class="md-nav__link"> Accessing container logs </a> </li> <li class="md-nav__item"> <a href="features/creating_images/" class="md-nav__link"> Creating images on-the-fly </a> </li> <li class="md-nav__item"> <a href="features/jib/" class="md-nav__link"> Using Jib </a> </li> <li class="md-nav__item"> <a href="features/configuration/" class="md-nav__link"> Custom configuration </a> </li> <li class="md-nav__item"> <a href="features/image_name_substitution/" class="md-nav__link"> Image name substitution </a> </li> <li class="md-nav__item"> <a href="features/advanced_options/" class="md-nav__link"> Advanced options </a> </li> <li class="md-nav__item"> <a href="features/reuse/" class="md-nav__link"> Reusable Containers (Experimental) </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4"> Modules <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Modules" data-md-level="1"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Modules </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_1" type="checkbox" id="__nav_4_1" > <label class="md-nav__link" for="__nav_4_1"> Databases <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Databases" data-md-level="2"> <label class="md-nav__title" for="__nav_4_1"> <span class="md-nav__icon md-icon"></span> Databases </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="modules/databases/" class="md-nav__link"> Database containers </a> </li> <li class="md-nav__item"> <a href="modules/databases/jdbc/" class="md-nav__link"> JDBC support </a> </li> <li class="md-nav__item"> <a href="modules/databases/r2dbc/" class="md-nav__link"> R2DBC support </a> </li> <li class="md-nav__item"> <a href="modules/databases/cassandra/" class="md-nav__link"> Cassandra Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/cockroachdb/" class="md-nav__link"> CockroachDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/couchbase/" class="md-nav__link"> Couchbase Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/clickhouse/" class="md-nav__link"> Clickhouse Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/cratedb/" class="md-nav__link"> CrateDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/databend/" class="md-nav__link"> Databend Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/db2/" class="md-nav__link"> DB2 Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/dynalite/" class="md-nav__link"> Dynalite Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/influxdb/" class="md-nav__link"> InfluxDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/mariadb/" class="md-nav__link"> MariaDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/mongodb/" class="md-nav__link"> MongoDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/mssqlserver/" class="md-nav__link"> MS SQL Server Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/mysql/" class="md-nav__link"> MySQL Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/neo4j/" class="md-nav__link"> Neo4j Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/oceanbase/" class="md-nav__link"> OceanBase Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/oraclefree/" class="md-nav__link"> Oracle Database Free Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/oraclexe/" class="md-nav__link"> Oracle-XE Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/orientdb/" class="md-nav__link"> OrientDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/postgres/" class="md-nav__link"> Postgres Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/presto/" class="md-nav__link"> Presto Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/questdb/" class="md-nav__link"> QuestDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/scylladb/" class="md-nav__link"> ScyllaDB </a> </li> <li class="md-nav__item"> <a href="modules/databases/tidb/" class="md-nav__link"> TiDB Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/timeplus/" class="md-nav__link"> Timeplus Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/trino/" class="md-nav__link"> Trino Module </a> </li> <li class="md-nav__item"> <a href="modules/databases/yugabytedb/" class="md-nav__link"> YugabyteDB Module </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="modules/activemq/" class="md-nav__link"> ActiveMQ </a> </li> <li class="md-nav__item"> <a href="modules/azure/" class="md-nav__link"> Azure Module </a> </li> <li class="md-nav__item"> <a href="modules/chromadb/" class="md-nav__link"> ChromaDB </a> </li> <li class="md-nav__item"> <a href="modules/consul/" class="md-nav__link"> Hashicorp Consul Module </a> </li> <li class="md-nav__item"> <a href="modules/docker_compose/" class="md-nav__link"> Docker Compose Module </a> </li> <li class="md-nav__item"> <a href="modules/elasticsearch/" class="md-nav__link"> Elasticsearch container </a> </li> <li class="md-nav__item"> <a href="modules/gcloud/" class="md-nav__link"> GCloud Module </a> </li> <li class="md-nav__item"> <a href="modules/grafana/" class="md-nav__link"> Grafana </a> </li> <li class="md-nav__item"> <a href="modules/hivemq/" class="md-nav__link"> HiveMQ Module </a> </li> <li class="md-nav__item"> <a href="modules/k3s/" class="md-nav__link"> K3s Module </a> </li> <li class="md-nav__item"> <a href="modules/k6/" class="md-nav__link"> k6 Module </a> </li> <li class="md-nav__item"> <a href="modules/kafka/" class="md-nav__link"> Kafka Module </a> </li> <li class="md-nav__item"> <a href="modules/ldap/" class="md-nav__link"> LDAP </a> </li> <li class="md-nav__item"> <a href="modules/localstack/" class="md-nav__link"> LocalStack Module </a> </li> <li class="md-nav__item"> <a href="modules/milvus/" class="md-nav__link"> Milvus </a> </li> <li class="md-nav__item"> <a href="modules/minio/" class="md-nav__link"> MinIO Containers </a> </li> <li class="md-nav__item"> <a href="modules/mockserver/" class="md-nav__link"> Mockserver Module </a> </li> <li class="md-nav__item"> <a href="modules/nginx/" class="md-nav__link"> Nginx Module </a> </li> <li class="md-nav__item"> <a href="modules/ollama/" class="md-nav__link"> Ollama </a> </li> <li class="md-nav__item"> <a href="modules/openfga/" class="md-nav__link"> OpenFGA </a> </li> <li class="md-nav__item"> <a href="modules/pinecone/" class="md-nav__link"> Pinecone </a> </li> <li class="md-nav__item"> <a href="modules/pulsar/" class="md-nav__link"> Apache Pulsar Module </a> </li> <li class="md-nav__item"> <a href="modules/qdrant/" class="md-nav__link"> Qdrant </a> </li> <li class="md-nav__item"> <a href="modules/rabbitmq/" class="md-nav__link"> RabbitMQ Module </a> </li> <li class="md-nav__item"> <a href="modules/redpanda/" class="md-nav__link"> Redpanda </a> </li> <li class="md-nav__item"> <a href="modules/solace/" class="md-nav__link"> Solace Container </a> </li> <li class="md-nav__item"> <a href="modules/solr/" class="md-nav__link"> Solr Container </a> </li> <li class="md-nav__item"> <a href="modules/toxiproxy/" class="md-nav__link"> Toxiproxy Module </a> </li> <li class="md-nav__item"> <a href="modules/typesense/" class="md-nav__link"> Typesense </a> </li> <li class="md-nav__item"> <a href="modules/vault/" class="md-nav__link"> Hashicorp Vault Module </a> </li> <li class="md-nav__item"> <a href="modules/weaviate/" class="md-nav__link"> Weaviate </a> </li> <li class="md-nav__item"> <a href="modules/webdriver_containers/" class="md-nav__link"> Webdriver Containers </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" > <label class="md-nav__link" for="__nav_5"> Test framework integration <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Test framework integration" data-md-level="1"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Test framework integration </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="test_framework_integration/junit_4/" class="md-nav__link"> JUnit 4 </a> </li> <li class="md-nav__item"> <a href="test_framework_integration/junit_5/" class="md-nav__link"> Jupiter / JUnit 5 </a> </li> <li class="md-nav__item"> <a href="test_framework_integration/spock/" class="md-nav__link"> Spock </a> </li> <li class="md-nav__item"> <a href="test_framework_integration/manual_lifecycle_control/" class="md-nav__link"> Manual container lifecycle control </a> </li> <li class="md-nav__item"> <a href="test_framework_integration/external/" class="md-nav__link"> External Integrations </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="examples/" class="md-nav__link"> Examples </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" > <label class="md-nav__link" for="__nav_7"> System Requirements <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="System Requirements" data-md-level="1"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> System Requirements </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="supported_docker_environment/" class="md-nav__link"> General Container runtime requirements </a> </li> <li class="md-nav__item"> <a href="error_missing_container_runtime_environment/" class="md-nav__link"> Fixing Issues with Discovering A Supported Container Runtime Environment </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_3" type="checkbox" id="__nav_7_3" > <label class="md-nav__link" for="__nav_7_3"> Continuous Integration <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Continuous Integration" data-md-level="2"> <label class="md-nav__title" for="__nav_7_3"> <span class="md-nav__icon md-icon"></span> Continuous Integration </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/aws_codebuild/" class="md-nav__link"> AWS CodeBuild </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/dind_patterns/" class="md-nav__link"> Patterns for running tests inside a Docker container </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/circle_ci/" class="md-nav__link"> CircleCI (Cloud, Server v2.x, and Server v3.x) </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/concourse_ci/" class="md-nav__link"> Concourse CI </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/drone/" class="md-nav__link"> Drone CI </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/gitlab_ci/" class="md-nav__link"> GitLab CI </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/bitbucket_pipelines/" class="md-nav__link"> Bitbucket Pipelines </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/tekton/" class="md-nav__link"> Tekton </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/continuous_integration/travis/" class="md-nav__link"> Travis </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="supported_docker_environment/windows/" class="md-nav__link"> Windows Support </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/logging_config/" class="md-nav__link"> Recommended logback configuration </a> </li> <li class="md-nav__item"> <a href="supported_docker_environment/image_registry_rate_limiting/" class="md-nav__link"> Image Registry rate limiting </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="getting_help/" class="md-nav__link"> Getting help </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_9" type="checkbox" id="__nav_9" > <label class="md-nav__link" for="__nav_9"> Contributing <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" aria-label="Contributing" data-md-level="1"> <label class="md-nav__title" for="__nav_9"> <span class="md-nav__icon md-icon"></span> Contributing </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="contributing/" class="md-nav__link"> Contributing </a> </li> <li class="md-nav__item"> <a href="contributing_docs/" class="md-nav__link"> Contributing to documentation </a> </li> <li class="md-nav__item"> <a href="bounty/" class="md-nav__link"> Testcontainers issue bounty policy </a> </li> </ul> </nav> </li> <li class="community-callout-wrapper"> <div class="community-callout"> <h2>Join the community</h2> <ul> <li> <a href="https://slack.testcontainers.org/" target="_blank"> <img src="/icons/slack.svg" alt="Slack" width="30" height="31"> </a> </li> <li> <a href="https://github.com/testcontainers" target="_blank"> <img src="/icons/github.svg" alt="GitHub" width="30" height="31"> </a> </li> <li> <a href="https://stackoverflow.com/questions/tagged/testcontainers" target="_blank"> <img src="/icons/stackoverflow.svg" alt="StackOverflow" width="26" height="31"> </a> </li> <li> <a href="https://twitter.com/testcontainers" target="_blank"> <img src="/icons/twitter.svg" alt="Twitter" width="37" height="31"> </a> </li> </ul> </div> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#about-testcontainers-for-java" class="md-nav__link"> About Testcontainers for Java </a> </li> <li class="md-nav__item"> <a href="#prerequisites" class="md-nav__link"> Prerequisites </a> </li> <li class="md-nav__item"> <a href="#maven-dependencies" class="md-nav__link"> Maven dependencies </a> <nav class="md-nav" aria-label="Maven dependencies"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#managing-versions-for-multiple-testcontainers-dependencies" class="md-nav__link"> Managing versions for multiple Testcontainers dependencies </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#sponsors" class="md-nav__link"> Sponsors </a> <nav class="md-nav" aria-label="Sponsors"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#bronze-sponsors" class="md-nav__link"> Bronze sponsors </a> </li> <li class="md-nav__item"> <a href="#donors" class="md-nav__link"> Donors </a> </li> <li class="md-nav__item"> <a href="#backers" class="md-nav__link"> Backers </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#who-is-using-testcontainers" class="md-nav__link"> Who is using Testcontainers? </a> </li> <li class="md-nav__item"> <a href="#license" class="md-nav__link"> License </a> </li> <li class="md-nav__item"> <a href="#attributions" class="md-nav__link"> Attributions </a> </li> <li class="md-nav__item"> <a href="#copyright" class="md-nav__link"> Copyright </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <a href="https://github.com/testcontainers/testcontainers-java/edit/main/docs/index.md" title="Edit this page" class="md-content__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg> </a> <h1 id="testcontainers-for-java">Testcontainers for Java</h1> <p align=center><strong>Not using Java? Here are other supported languages!</strong></p> <div class="card-grid"> <a class="card-grid-item"><img src="language-logos/java.svg"/>Java</a> <a href="https://golang.testcontainers.org/" class="card-grid-item"><img src="language-logos/go.svg"/>Go</a> <a href="https://dotnet.testcontainers.org/" class="card-grid-item"><img src="language-logos/dotnet.svg"/>.NET</a> <a href="https://node.testcontainers.org/" class="card-grid-item"><img src="language-logos/nodejs.svg"/>Node.js</a> <a href="https://testcontainers-python.readthedocs.io/en/latest/" class="card-grid-item"><img src="language-logos/python.svg"/>Python</a> <a href="https://docs.rs/testcontainers/latest/testcontainers/" class="card-grid-item"><img src="language-logos/rust.svg"/>Rust</a> <a href="https://github.com/testcontainers/testcontainers-hs/" class="card-grid-item" ><img src="language-logos/haskell.svg"/>Haskell</a> <a href="https://github.com/testcontainers/testcontainers-ruby/" class="card-grid-item" ><img src="language-logos/ruby.svg"/>Ruby</a> </div> <h2 id="about-testcontainers-for-java">About Testcontainers for Java</h2> <p><em>Testcontainers for Java</em> is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.</p> <p>Testcontainers make the following kinds of tests easier:</p> <ul> <li><strong>Data access layer integration tests</strong>: use a containerized instance of a MySQL, PostgreSQL or Oracle database to test your data access layer code for complete compatibility, but without requiring complex setup on developers' machines and safe in the knowledge that your tests will always start with a known DB state. Any other database type that can be containerized can also be used.</li> <li><strong>Application integration tests</strong>: for running your application in a short-lived test mode with dependencies, such as databases, message queues or web servers.</li> <li><strong>UI/Acceptance tests</strong>: use <a href="modules/webdriver_containers/">containerized web browsers</a>, compatible with Selenium, for conducting automated UI tests. Each test can get a fresh instance of the browser, with no browser state, plugin variations or automated browser upgrades to worry about. And you get a video recording of each test session, or just each session where tests failed.</li> <li><strong>Much more!</strong> Check out the various contributed modules or create your own custom container classes using <a href="features/creating_container/"><code>GenericContainer</code></a> as a base.</li> </ul> <h2 id="prerequisites">Prerequisites</h2> <ul> <li>Docker - please see <a href="supported_docker_environment/">General Docker requirements</a></li> <li>A supported JVM testing framework:<ul> <li><a href="test_framework_integration/junit_4/">JUnit 4</a> - See the <a href="quickstart/junit_4_quickstart/">JUnit 4 Quickstart Guide</a></li> <li><a href="test_framework_integration/junit_5/">Jupiter/JUnit 5</a></li> <li><a href="test_framework_integration/spock/">Spock</a></li> <li><em>Or</em> manually add code to control the container/test lifecycle (See <a href="test_framework_integration/junit_4/#manually-controlling-container-lifecycle">hints for this approach</a>)</li> </ul> </li> </ul> <h2 id="maven-dependencies">Maven dependencies</h2> <p>Testcontainers is distributed as separate JARs with a common version number:</p> <ul> <li>A core JAR file for core functionality, generic containers and docker-compose support</li> <li>A separate JAR file for each of the specialised modules. Each module's documentation describes the Maven/Gradle dependency to add to your project's build.</li> </ul> <p>For the core library, the latest Maven/Gradle dependency is as follows: </p> <div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Gradle</label><label for="__tabbed_1_2">Maven</label></div> <div class="tabbed-content"> <div class="tabbed-block"> <div class="highlight"><pre><span></span><code><span class="n">testImplementation</span><span class="w"> </span><span class="s2">"org.testcontainers:testcontainers:1.20.5"</span> </code></pre></div> </div> <div class="tabbed-block"> <div class="highlight"><pre><span></span><code><span class="nt"><dependency></span> <span class="w"> </span><span class="nt"><groupId></span>org.testcontainers<span class="nt"></groupId></span> <span class="w"> </span><span class="nt"><artifactId></span>testcontainers<span class="nt"></artifactId></span> <span class="w"> </span><span class="nt"><version></span>1.20.5<span class="nt"></version></span> <span class="w"> </span><span class="nt"><scope></span>test<span class="nt"></scope></span> <span class="nt"></dependency></span> </code></pre></div> </div> </div> </div> <p>You can also <a href="https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.testcontainers%22">check the latest version available on Maven Central</a>.</p> <h3 id="managing-versions-for-multiple-testcontainers-dependencies">Managing versions for multiple Testcontainers dependencies</h3> <p>To avoid specifying the version of each dependency, you can use a <code>BOM</code> or <code>Bill Of Materials</code>.</p> <p>Using Maven you can add the following to <code>dependencyManagement</code> section in your <code>pom.xml</code>:</p> <div class="tabbed-set tabbed-alternate" data-tabs="2:1"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Maven</label></div> <div class="tabbed-content"> <div class="tabbed-block"></div> </div> </div> <div class="highlight"><pre><span></span><code><span class="nt"><dependencyManagement></span> <span class="w"> </span><span class="nt"><dependencies></span> <span class="w"> </span><span class="nt"><dependency></span> <span class="w"> </span><span class="nt"><groupId></span>org.testcontainers<span class="nt"></groupId></span> <span class="w"> </span><span class="nt"><artifactId></span>testcontainers-bom<span class="nt"></artifactId></span> <span class="w"> </span><span class="nt"><version></span>1.20.5<span class="nt"></version></span> <span class="w"> </span><span class="nt"><type></span>pom<span class="nt"></type></span> <span class="w"> </span><span class="nt"><scope></span>import<span class="nt"></scope></span> <span class="w"> </span><span class="nt"></dependency></span> <span class="w"> </span><span class="nt"></dependencies></span> <span class="nt"></dependencyManagement></span> </code></pre></div> <p>and then use dependencies without specifying a version:</p> <div class="tabbed-set tabbed-alternate" data-tabs="3:1"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Maven</label></div> <div class="tabbed-content"> <div class="tabbed-block"> <div class="highlight"><pre><span></span><code><span class="nt"><dependency></span> <span class="w"> </span><span class="nt"><groupId></span>org.testcontainers<span class="nt"></groupId></span> <span class="w"> </span><span class="nt"><artifactId></span>mysql<span class="nt"></artifactId></span> <span class="w"> </span><span class="nt"><scope></span>test<span class="nt"></scope></span> <span class="nt"></dependency></span> </code></pre></div> </div> </div> </div> <p>Using Gradle 5.0 or higher, you can add the following to the <code>dependencies</code> section in your <code>build.gradle</code>:</p> <div class="tabbed-set tabbed-alternate" data-tabs="4:1"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Gradle</label></div> <div class="tabbed-content"> <div class="tabbed-block"> <div class="highlight"><pre><span></span><code><span class="n">implementation</span><span class="w"> </span><span class="nf">platform</span><span class="o">(</span><span class="s1">'org.testcontainers:testcontainers-bom:1.20.5'</span><span class="o">)</span><span class="w"> </span><span class="c1">//import bom</span> <span class="n">testImplementation</span><span class="o">(</span><span class="s1">'org.testcontainers:mysql'</span><span class="o">)</span><span class="w"> </span><span class="c1">//no version specified</span> </code></pre></div> </div> </div> </div> <p><a href="jitpack_dependencies/">JitPack</a> builds are available for pre-release versions.</p> <div class="admonition warning"> <p class="admonition-title">Shaded dependencies</p> <p>Testcontainers depends on other libraries (like docker-java) for it to work.<br /> Some of them (JUnit, docker-java-{api,transport} and its transitive dependencies, JNA, visible-assertions and others) are part of our public API.<br /> But there are also "private", implementation detail dependencies (e.g., docker-java-core, Guava, OkHttp, etc.) that are not exposed to public API but prone to conflicts with test code/application under test code. As such, <strong>these libraries are 'shaded' into the core Testcontainers JAR</strong> and relocated under <code>org.testcontainers.shaded</code> to prevent class conflicts.</p> </div> <h2 id="sponsors">Sponsors</h2> <p>A huge thank you to our sponsors:</p> <h3 id="bronze-sponsors">Bronze sponsors</h3> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://cirrus-ci.org/"> <img src="sponsor_logos/cirrus_labs.jpg" style="width: 100%"/> <p>Cirrus CI</p> <!-- via fkorotkov's sponsorship --> </a> </div> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://vivy.com"> <img src="sponsor_logos/vivy.png" style="width: 100%"/> <p>Vivy</p> </a> </div> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://www.jooq.org/"> <img src="sponsor_logos/jooq.jpg" style="width: 100%"/> <p>jOOQ</p> </a> </div> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://www.backbase.com/"> <img src="sponsor_logos/backbase.png" style="width: 100%"/> <p>Backbase</p> </a> </div> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://www.elastic.co/"> <img src="sponsor_logos/elastic.png" style="width: 100%"/> <p>Elastic</p> </a> </div> <h3 id="donors">Donors</h3> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://www.redhat.com"> <img src="sponsor_logos/red_hat.png" style="width: 100%"/> <p>Red Hat</p> </a> </div> <div style="text-align:center; max-width: 128px; display: inline-block; margin: 5px;"> <a href="https://www.spotify.com"> <img src="sponsor_logos/spotify.png" style="width: 100%"/> <p>Spotify</p> </a> </div> <h3 id="backers">Backers</h3> <ul> <li><a href="https://github.com/rieckpil">Philip Riecks (@rieckpil)</a></li> <li><a href="https://github.com/khmarbaise">Karl Heinz Marbaise (@khmarbaise)</a></li> <li><a href="https://github.com/sascha-frinken">Sascha Frinken (@sascha-frinken)</a></li> <li><a href="https://github.com/dreis2211">Christoph Dreis (@dreis2211)</a></li> <li><a href="https://github.com/zhenik">Nikita Zhevnitskiy (@zhenik)</a></li> <li><a href="https://github.com/bastoker">Bas Stoker (@bastoker)</a></li> <li><a href="https://github.com/oleg-nenashev">Oleg Nenashev (@oleg-nenashev)</a></li> <li><a href="https://github.com/rikglover">Rik Glover (@rikglover)</a></li> <li><a href="https://github.com/recrsn">Amitosh Swain Mahapatra (@recrsn)</a></li> <li><a href="https://opencollective.com/paris-apostolopoulos">Paris Apostolopoulos</a></li> </ul> <h2 id="who-is-using-testcontainers">Who is using Testcontainers?</h2> <ul> <li><a href="https://zeroturnaround.com">ZeroTurnaround</a> - Testing of the Java Agents, micro-services, Selenium browser automation</li> <li><a href="https://zipkin.io">Zipkin</a> - MySQL and Cassandra testing</li> <li><a href="https://gora.apache.org">Apache Gora</a> - CouchDB testing</li> <li><a href="https://james.apache.org">Apache James</a> - LDAP and Cassandra integration testing</li> <li><a href="https://github.com/streamsets/datacollector">StreamSets</a> - LDAP, MySQL Vault, MongoDB, Redis integration testing</li> <li><a href="https://github.com/Playtika/testcontainers-spring-boot">Playtika</a> - Kafka, Couchbase, MariaDB, Redis, Neo4j, Aerospike, MemSQL</li> <li><a href="https://www.jetbrains.com/">JetBrains</a> - Testing of the TeamCity plugin for HashiCorp Vault</li> <li><a href="https://plumbr.io">Plumbr</a> - Integration testing of data processing pipeline micro-services</li> <li><a href="https://streaml.io/">Streamlio</a> - Integration and Chaos Testing of our fast data platform based on Apache Pulsar, Apache BookKeeper and Apache Heron.</li> <li><a href="https://projects.spring.io/spring-session/">Spring Session</a> - Redis, PostgreSQL, MySQL and MariaDB integration testing</li> <li><a href="https://camel.apache.org">Apache Camel</a> - Testing Camel against native services such as Consul, Etcd and so on</li> <li><a href="https://infinispan.org">Infinispan</a> - Testing the Infinispan Server as well as integration tests with databases, LDAP and KeyCloak</li> <li><a href="https://www.instana.com">Instana</a> - Testing agents and stream processing backends</li> <li><a href="https://www.ebay.com">eBay Marketing</a> - Testing for MySQL, Cassandra, Redis, Couchbase, Kafka, etc.</li> <li><a href="https://www.skyscanner.net/">Skyscanner</a> - Integration testing against HTTP service mocks and various data stores</li> <li><a href="https://neo4j.com/developer/neo4j-ogm/">Neo4j-OGM</a> - Testing with Neo4j</li> <li><a href="https://github.com/spring-projects/spring-data-neo4j/">Spring Data Neo4j</a> - Testing imperative and reactive implementations with Neo4j</li> <li><a href="https://www.lightbend.com/">Lightbend</a> - Testing <a href="https://doc.akka.io/docs/alpakka-kafka/current/">Alpakka Kafka</a> and support in <a href="https://doc.akka.io/docs/alpakka-kafka/current/testing.html#testing-with-kafka-in-docker">Alpakka Kafka Testkit</a></li> <li><a href="https://corporate.zalando.com/en">Zalando SE</a> - Testing core business services</li> <li><a href="https://tech.europace.de/">Europace AG</a> - Integration testing for databases and micro services</li> <li><a href="https://github.com/micronaut-projects/micronaut-data/">Micronaut Data</a> - Testing of Micronaut Data JDBC, a database access toolkit</li> <li><a href="https://github.com/eclipse-vertx/vertx-sql-client">Vert.x SQL Client</a> - Testing with PostgreSQL, MySQL, MariaDB, SQL Server, etc.</li> <li><a href="https://www.jhipster.tech/">JHipster</a> - Couchbase and Cassandra integration testing</li> <li><a href="https://www.wescale.com">wescale</a> - Integration testing against HTTP service mocks and various data stores</li> <li><a href="https://marquezproject.github.io/marquez">Marquez</a> - PostgreSQL integration testing</li> <li><a href="https://wise.com">Wise (formerly TransferWise)</a> - Integration testing for different RDBMS, kafka and micro services</li> <li><a href="https://xwiki.org">XWiki</a> - <a href="https://dev.xwiki.org/xwiki/bin/view/Community/Testing/DockerTesting/">Testing XWiki</a> under all <a href="https://dev.xwiki.org/xwiki/bin/view/Community/SupportStrategy/">supported configurations</a></li> <li><a href="https://github.com/apache/skywalking">Apache SkyWalking</a> - End-to-end testing of the Apache SkyWalking, and plugin tests of its subproject, <a href="https://github.com/apache/skywalking-python">Apache SkyWalking Python</a>, and of its eco-system built by the community, like <a href="https://github.com/SkyAPM/nodejs">SkyAPM NodeJS Agent</a></li> <li><a href="https://www.jooq.org">jOOQ</a> - Integration testing all of jOOQ with a variety of RDBMS</li> <li><a href="https://trino.io">Trino (formerly Presto SQL)</a> - Integration testing all Trino core & connectors, including tests of multi-node deployments and security configurations.</li> <li>Google - Various open source projects: <a href="https://github.com/GoogleCloudPlatform/opentelemetry-operations-java">OpenTelemetry</a>, <a href="https://github.com/seattle-uat/universal-application-tool">Universal Application Tool</a>, <a href="https://github.com/GoogleCloudPlatform/cloudbowl-microservice-game">CloudBowl</a></li> <li><a href="https://www.backbase.com/">Backbase</a> - Unit, Integration and Acceptance testing for different the databases supported (Oracle, SQL Server, MySQL), the different messaging systems supported (Kafka, Rabbit, AMQ) and other microservices and HTTP mocks.</li> <li><a href="https://www.cloudbees.com/">CloudBees</a> - Integration testing of products, including but not limited to database and AWS/Localstack integration testing.</li> <li><a href="https://www.jenkins.io/">Jenkins</a> - Integration testing of multiple plugins and the Trilead SSH2 fork maintained by the Jenkins community (<a href="https://github.com/search?l=Maven+POM&q=org%3Ajenkinsci+testcontainers&type=Code">query</a>).</li> <li><a href="https://www.elastic.co">Elastic</a> - Integration testing of the Java APM agent</li> <li><a href="https://www.alkira.com/">Alkira</a> - Testing of multiple micro-services using Kafka, PostgreSQL, Apache Zookeeper, Etcd and so on.</li> <li><a href="https://www.togglz.org/">Togglz</a> - Feature Flags for the Java platform</li> <li><a href="https://www.byzer.org/home">Byzer</a> - Integration tests for Data and AI platforms are based on multiple versions of Byzer, Ray and Apache Spark.</li> <li><a href="https://github.com/apache/incubator-seatunnel">Apache SeaTunnel</a> - Integration testing with different datasource.</li> <li><a href="https://github.com/bucket4j/bucket4j">Bucket4j</a> - Java rate-limiting library based on the token-bucket algorithm.</li> <li><a href="https://github.com/housepower/spark-clickhouse-connector">Spark ClickHouse Connector</a> - Integration tests for Apache Spark with both single node ClickHouse instance and multi-node ClickHouse cluster.</li> <li><a href="https://github.com/quarkusio/quarkus">Quarkus</a> - Testcontainers is used extensively for Quarkus' <a href="https://quarkus.io/guides/dev-services">DevServices</a> feature.</li> <li><a href="https://kyuubi.apache.org">Apache Kyuubi</a> - Integration testing with Trino as data source engine, Kafka, etc.</li> <li><a href="https://www.dash0.com">Dash0</a> - Integration testing for OpenTelemetry Observability product.</li> </ul> <h2 id="license">License</h2> <p>See <a href="https://raw.githubusercontent.com/testcontainers/testcontainers-java/main/LICENSE">LICENSE</a>.</p> <h2 id="attributions">Attributions</h2> <p>This project includes a modified class (ScriptUtils) taken from the Spring JDBC project, adapted under the terms of the Apache license. Copyright for that class remains with the original authors.</p> <p>This project was initially inspired by a <a href="https://gist.github.com/mosheeshel/c427b43c36b256731a0b">gist</a> by <a href="https://github.com/mosheeshel">Moshe Eshel</a>.</p> <h2 id="copyright">Copyright</h2> <p>Copyright (c) 2015-2021 Richard North and other authors.</p> <p>See <a href="https://raw.githubusercontent.com/testcontainers/testcontainers-java/main/AUTHORS">AUTHORS</a> for contributors.</p> </article> </div> </div> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer"> <a href="quickstart/junit_4_quickstart/" class="md-footer__link md-footer__link--next" aria-label="Next: JUnit 4 Quickstart" rel="next"> <div class="md-footer__title"> <div class="md-ellipsis"> <span class="md-footer__direction"> Next </span> JUnit 4 Quickstart </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": ".", "features": [], "search": "assets/javascripts/workers/search.0bbba5b5.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script> <script src="assets/javascripts/bundle.e1a181d9.min.js"></script> </body> </html>