https://testcontainers.com/ AtomicJar is now part of Docker ! Read the blog Dismiss Announcement Testcontainers Logo Menu * Desktop NEW * Cloud * Getting Started * Guides * Modules * Docs + # Java + # Go + # .NET + # Node.js + # Python + # Rust + # Haskell + # Ruby + # Clojure + # Elixir * Blog * Slack * GitHub # # # [nginx] [selenium] # # # [clickhous] # # # # [rabbitmq] [neo4j] [couchbase] # # # [kubernete] # [elastic] [mysql] # [postgresq] [kafka] [mongo] [laptop] Unit tests with real dependencies Testcontainers is an open source framework for providing throwaway, lightweight instances of databases, message brokers, web browsers, or just about anything that can run in a Docker container. How it works Test dependencies as code No more need for mocks or complicated environment configurations. Define your test dependencies as code, then simply run your tests and containers will be created and then deleted. With support for many languages and testing frameworks, all you need is Docker. # Get started with Java # Get started with Go # Get started with .NET # Get started with Node.js # Get started with Python # Get started with Rust # Get started with Haskell # Get started with Ruby # Get started with Clojure # Get started with Elixir # Java # Go # .NET # Node.js # Python # Rust # Haskell # Ruby # Clojure # Elixir GenericContainer redis = new GenericContainer("redis:5.0.3-alpine") .withExposedPorts(6379); container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: testcontainers.ContainerRequest{ Image: "redis:5.0.3-alpine", ExposedPorts: []string{"6379/tcp"}, WaitingFor: wait.ForLog("Ready to accept connections"), }, Started: true, }) RedisContainer redisContainer = new RedisBuilder().Build(); await redisContainer.StartAsync(); const redis = await new GenericContainer("redis:5.0.3-alpine") .withExposedPorts(6379) .withWaitStrategy(Wait.forLogMessage("Ready to accept connections")) .start(); redis = ( DockerContainer("redis:5.0.3-alpine") .with_exposed_ports(6379) ) redis.start() wait_for_logs(redis, "Ready to accept connections") let docker = clients::Cli::default(); let redis = docker.run(redis::Redis::default()); redis <- run $ containerRequest (TestContainers.fromTag "redis:5.0.3-alpine") & setExpose ["6379/tcp"] & setWaitingFor (waitUntilMappedPortReachable "6379/tcp") redis = Testcontainers::DockerContainer.new("redis:5.0.3-alpine").with_exposed_port(6379) redis.start (def container (-> (tc/create {:image-name "redis:5.0.3-alpine") :exposed-ports [6379]}) (tc/start!))) {:ok, _} = Testcontainers.start_link() config = %Testcontainers.Container{image: "redis:5.0.3-alpine"} {:ok, container} = Testcontainers.start_container(config) Modules Test Anything You Can Containerize: Database, Message Broker, And More [postgresql] [kafka] [mongodb] [kubernetes] [cassandra] [elasticsearch] [mysql] [redpanda] [rabbitmq] [neo4j] [couchbase] [google-cloud] [azure] [localstack] [cockroachdb] [clickhouse] [consul] [hivemq] [k3s] [nginx] [presto] [pulsar] [questdb] [selenium] See all 50+ Modules Use cases How Testcontainers can help you [databa] Data access layer integration tests Use a containerized instance of your database to test your data access layer code for complete compatibility, without requiring a complex setup on developer machines. Trust that your tests will always start with a known state. [browse] UI/Acceptance tests Use containerized web browsers, compatible with Selenium, to run automated UI tests. Each test gets a fresh, clean instance of the browser, without having to worry about variations in plugins or required updates. [puzzle] Application integration tests Run your application in a short-lived test mode with dependencies, such as databases, message queues or web servers, to give you a rich interactive and explorative testing environment. Get started Supported Languages There are implementations of Testcontainers in all of your favorite languages. Click through to read their specific documentation. # Java # Go # .NET # Node.js # Python # Rust # Haskell # Ruby # Clojure # Elixir Industry standard Companies using Testcontainers Spotify JetBrains Netflix Uber CapitalOne Elastic Wise Zalando Skyscanner Playtika Articles About Testcontainers # engineering.atspotify.com Announcing the Recipients of the 2023 Spotify FOSS Fund Testcontainers was also part of last year's fund, receiving 13,000 EUR. And there's a good reason why it's back in 2023 # devblogs.microsoft.com Trying out MongoDB with EF Core using Testcontainers An introduction to the MongoDB database provider for EF Core, including use of Testcontainers # uber.com Handling Flaky Unit Tests in Java Building a stable and reliable testing system is often a key requirement for software development organizations # doordash.engineering How to Boost Code Coverage with Functional Testing Introducing a non manual functional testing approach that can be run like unit tests locally or in a Continuous Integration (CI) pipeline. # capitalone.com Testcontainers & LocalStack for Spring Boot functional tests A guide from Capital One to using Docker and Testcontainers to make functional tests more portable & economical without sacrificing testing quality. # cloud.google.com Develop and Test Spring Boot Applications Consistently Learn how to consistently build and test with environment parity from development to production with Emulators and open-source Testcontainers. A huge thankyou to our sponsors Bronze Sponsors CirrusCI Vivy JOOQ Backbase Elastic Gradle Devlocity Donors RedHat Spotify GitHub Backers Philip Riecks Karl Heinz Marbaise Sascha Frinken Christoph Dreis Nikita Zhevnitskiy Bas Stoker Oleg Nenashev Rik Glover Amitosh Swain Mahapatra Paris Apostolopoulos Community Champions Inspirational members of the community Testcontainers Community Champions actively contribute to the growth and betterment of the Testcontainers community. They are passionate about Testcontainer, and use their knowledge and skills to help others succeed. Meet our Community Champions [anton-arhipov] [cora-iberkleid] [dan-dobrin] [dashaun-carter] [grace-jansen] [holly-cummins] [ivan-lopez] [ixchel-ruiz-flores] [james-ward] [josh-long] [karl-heinz-marbaise] [kyle-aure] Want to stay up to date? Read the Newsletter Links * Community Champions * Testcontainers for Java * Testcontainers for Go * Testcontainers for .NET * Testcontainers for Node.js * Testcontainers for Python * Testcontainers for Rust * Testcontainers for Haskell * Testcontainers for Ruby * Testcontainers for Clojure * Testcontainers for Elixir Join the community We hope that you find Testcontainers reliable and intuitive to use. However sometimes things don't go the way we'd expect and we'd like to try and help out if we can. * Slack * GitHub * StackOverflow * Twitter Privacy Policy Cookie Policy California Consumer Privacy Act (CCPA) Opt-Out Icon Your Privacy Choices Notice at Collection