how to mock DBs

This page summarizes the projects mentioned and recommended in the original post on reddit.com/r/golang

Our great sponsors
  • Scout APM - Less time debugging, more time building
  • SonarLint - Clean code begins in your IDE with SonarLint
  • SaaSHub - Software Alternatives and Reviews
  • dockertest

    Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work.

    This one looks cool!, I'll need to take a look to the documentation just to see if it satisfies our needs. I have been using an alternative library that seems to be more stable: https://github.com/ory/dockertest. I like it a lot and it has some good and complete documentation with examples included. Do you have any previous experience with this one or any other benchmark against testcontainers?

  • gomock

    GoMock is a mocking framework for the Go programming language. (by golang)

    In all other layers, my repositories are mocked using https://github.com/golang/mock

  • Scout APM

    Less time debugging, more time building. Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.

  • Testify

    A toolkit with common assertions and mocks that plays nicely with the standard library

    I usually use the testify (https://github.com/stretchr/testify) It can help you to mock your external components. For unit tests I see one way and it is not to allow external interaction (DBs, APIs, etc) while tests are going. Keep your project structure like the clean architecture (https://betterprogramming.pub/the-clean-architecture-beginners-guide-e4b7058c1165) and then, as a result, you will have opportunity to replace components and configure their behavior.

  • go

    The Go programming language

    Another approach if you want to stay at the DB level is to implement the Io/fs interface (https://pkg.go.dev/io/fs). It is currently only read-only but you can extend it with a write mode in your project (see https://github.com/golang/go/issues/45757).

  • postgres

    Docker Official Image packaging for Postgres (by docker-library)

    The docker file I used is basically this one except as I mention I hack out the VOLUME line, which makes it transient.

  • testcontainers-node

    TestContainers is a NodeJS library that supports tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.

    I have used only testcontainers. I used it for the first time while working with Java, and then with NodeJS. When I came to know that a Golang version is available, I ended up using it since I'm now familiar with the framework irrespective of the language.

  • redismock

    Redis client Mock

    I used also other lib to mock different components like redis cache.

  • SonarLint

    Clean code begins in your IDE with SonarLint. Up your coding game and discover issues early. SonarLint is a free plugin that helps you find & fix bugs and security issues from the moment you start writing code. Install from your favorite IDE marketplace today.

  • moq

    Interface mocking tool for go generate

    Just replaced mockery generated mocks with https://github.com/matryer/moq Alot cleaner imo at least for me

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts