When it comes to writing robust and reliable tests for your Go applications, having a well-structured and efficient testing setup is crucial. One common challenge in testing Go applications is dealing with database interactions. To ensure that your code functions correctly, it’s essential to create a controlled environment for database operations during testing. In this blog post, we’ll explore how to create a mock GORM database for testing purposes, allowing you to isolate and verify your database interactions in a controlled manner.
Here is some copy-and-paste code (explained below) which should get you started.
import (
"github.com/DATA-DOG/go-sqlmock"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func NewMockGORM() (GORM *gorm.DB, close func()) {
db, mock, err := sqlmock.New()
if err != nil {
panic(err)
}
// GORM always runs this query, so mock it for all tests
mock.ExpectQuery("SELECT VERSION()").WillReturnRows(sqlmock.NewRows([]string{"version"}).AddRow("5.7.0"))
GORM, err = gorm.Open(mysql.New(mysql.Config{Conn: db}), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})
if err != nil {
panic(err)
}
return GORM, func() { db.Close() }
}Code language: PHP (php)
The code block above defines a NewMockGORM function that sets up a mock GORM database instance for testing. Let’s break down what this code does and how it can be a valuable addition to your testing toolkit.