Testcontainers for .NET
Official docs for Testcontainers for .NET, the library that starts real databases, caches and brokers in Docker for your tests and removes them afterwards. Ready-made modules for SQL Server, PostgreSQL, Redis and more. Free and open source under MIT.
4.15.0
NuGet · Oct 2026
4.4k
GitHub · Oct 2026
MIT
GitHub · Oct 2026
Guide
Web Development
Testcontainers
An afternoon
Intermediate
Free
What it is
Testcontainers for .NET is a library for running throwaway Docker containers from your test code. Instead of pointing integration tests at a shared development database or a fake in-memory one, each test run starts a real SQL Server, PostgreSQL, Redis or message broker, uses it, and removes it afterwards. It is part of the wider Testcontainers project, which has versions for Java, Go, Node.js, Python and other languages.
What the documentation covers
- Getting started: installing the package, creating a container with the builder API, waiting until it is ready and cleaning it up.
- Modules: pre-configured containers such as SQL Server, PostgreSQL, MySQL, MongoDB, Redis, RabbitMQ and Kafka, each with a builder and a helper that gives you the connection string.
- Examples: using containers with xUnit fixtures and with ASP.NET Core integration tests.
- CI: running the same tests in pipelines such as GitHub Actions, where Docker is available on the standard Linux runners.
Is it worth your time?
Yes, if you write integration tests for code that uses a database. EF Core's in-memory provider does not enforce constraints, does not support transactions and translates queries differently from SQL Server, so tests can pass while production fails. A real database in a container catches unique constraint violations, cascade delete surprises, concurrency conflicts and LINQ that SQL Server cannot translate. Combined with WebApplicationFactory, it lets you test your whole API against the same database engine you deploy to.
How to learn it
Read the getting started page, then the SQL Server or PostgreSQL module page. Start one container per test class or collection with an xUnit fixture, pass its connection string into WebApplicationFactory, run your EF Core migrations once, and reset data between tests. Then run the same suite in your CI pipeline.
Prerequisites
xUnit basics, ASP.NET Core integration tests and Docker installed locally.
Free or paid?
Free and open source under the MIT licence.
What you can do after it
Write integration tests that run against a real database locally and in CI, with no shared test environment to break.
Ready to start?
Opens on Testcontainers in a new tab.
Stuck on something specific?
Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Sessions are free for approved Sefism members, and a few slots open each week.
Follow along
New writing, resources and project ideas land here first.