testcontainers-go
otj-pg-embedded
testcontainers-go | otj-pg-embedded | |
---|---|---|
18 | 6 | |
3,115 | 666 | |
4.8% | 0.2% | |
9.7 | 6.4 | |
7 days ago | 13 days ago | |
Go | Java | |
MIT License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
testcontainers-go
-
Using test helpers in Go
Let's first look at the original version of the test, in this case, an end-to-end, using testcontainers.
-
Run and test DynamoDB applications locally using Docker and Testcontainers
It supports multiple languages (including Go!) and databases (also messaging infrastructure etc.) - All you need is Docker. Testcontainers for Go makes it simple to programmatically create and clean up container-based dependencies for automated integration/smoke tests. You can define test dependencies as code, run tests and delete the containers once done.
-
๐ Effortless Integration Tests with Testcontainers in Golang ๐งช
Testcontainers Go Documentation
-
go-ecommerce-microservices: A practical e-commerce microservices, built with cqrs, event sourcing, vertical slice architecture, event-driven architecture.
Some of the features: - โ Using Vertical Slice Architecture as a high level architecture - โ Using Event Driven Architecture on top of RabbitMQ Message Broker with a custom [Event Bus](pkg/messaging/bus/) - โ Using Event Sourcing in Audit Based services like [Orders Service](services/orders/) - โ Using CQRS Pattern and Mediator Patternon top of Go-MediatR library - โ Using Dependency Injection and Inversion of Controlon top of uber-go/fx library - โ Using RESTFul api with Echo framework and using swagger with swaggo/swag library - โ Using Postgres and EventStoreDB to write databases with fully supports transactions(ACID) - โ Using MongoDB and Elastic Search for read databases (NOSQL) - โ Using OpenTelemetry for collection Distributed Tracing with using Jaeger and Zipkin - โ Using OpenTelemetry for collection Metrics with using Prometheus and Grafana - โ Using Unit Test for testing small units with mocking dependent classes and using Mockery for mocking dependencies - โ Using End2End Test and Integration Test for testing features with all of their real dependeinces using docker containers (cleanup tests) and testcontainers-go library
- How to start a Go project in 2023
-
Questions about Interfacing for Unit-Tests
For example, you could take a look at this open-source project that helps you spawn docker containers as part of your test setup enabling you to execute queries to a local database.
-
How to Work with SQL Databases in Go
Using something like TestContainers to spin up a DB for testing has been my best experience. Any mocks leave too much room for error imo
-
Different SQL drivers for test and production
I highly recommend testcontainers for this.
-
Go API Project Set-Up
The next block in .gitlab-ci.yml is the services block. Since our tests use testcontainers package and we're pushing a docker container onto Dockerhub, we will need to specify a services block next. Services will enable our pipeline to leverage Docker-in-Docker DinD.
- Do you test your API, repositories, & services together (e.g., e2e) or separately?
otj-pg-embedded
-
Testcontainers
Anyone have an opinion of embedded-postgres vs https://github.com/opentable/otj-pg-embedded (of which its a fork) for Clojure use?
-
What's the best approach for creating an embedded Postgresql to be used in production?
Can you elaborate a bit on this part? I'm still unsure why it's unadvised to do this, as I understood from other commenters it's because there is no official support for it correct? Why can't I use opentable for instance? https://github.com/opentable/otj-pg-embedded
-
SQLite Is Dynamically Typed (2020)
It's pretty easy to run embedded postgres on the JVM: https://github.com/opentable/otj-pg-embedded
The defaults create a temporary DB which is useful for dev & tests, but a pair of calls to .setCleanDataDirectory(false) and .setDataDirectory("...") will change that.
If you don't like the default postgres version, you may select one from https://search.maven.org/search?q=io.zonky.test.postgres or include your own postgres binary.
- Experiment: using PostgreSQL as a user process
-
Pg_tmp โ Run tests on an isolated, temporary PostgreSQL database
I've been using this embedded PostgreSQL thing for tests:
https://github.com/opentable/otj-pg-embedded
It's very simple to use and works perfectly. The one problem, and it's a significant one, is that it only ships one version of PostgreSQL, and adding another was difficult enough that I didn't.
What are some alternatives?
dockertest - Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work.
Testcontainers - Testcontainers 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.
venom - ๐ Manage and run your integration tests with efficiency - Venom run executors (script, HTTP Request, web, imap, etc... ) and assertions
postgresql-embedded - Embedded PostgreSQL Server
testcontainers-dotnet - A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions.
integresql - IntegreSQL manages isolated PostgreSQL databases for your integration tests.
localstripe - A fake but stateful Stripe server that you can run locally, for testing purposes.
embedded-postgres - Run a real Postgres database locally on Linux, OSX or Windows as part of another Go application or test
testcontainers-python - Testcontainers is a Python library that providing a friendly API to run Docker container. It is designed to create runtime environment to use during your automatic tests.
rush - Production-driven prototyping. This starter is setup in a production-friendly way and will setup tests + dev environment exactly like a live project will work. Works the same both on your laptop or Github CI, so you can go from hacking on your laptop to a full gitops environment.