DEV Community

Saunak Surani
Saunak Surani

Posted on • Edited on

Part 3: Ensuring Data Integrity: Unit and Integration Testing in GoLang RestAPI with MariaDB

Testing is a critical aspect of software development, ensuring that your application functions as expected and data integrity is maintained. In this article, we'll explore writing unit tests and integration tests for your GoLang RestAPI project with MariaDB. This rigorous testing approach guarantees the reliability of your codebase.

Section 1: The Importance of Testing in Software Development

Testing prevents defects, improves code quality, and enhances user satisfaction. Unit tests isolate individual components, while integration tests ensure these components work together seamlessly.

Section 2: Writing Unit Tests for GoLang RestAPI

Unit tests verify the functionality of individual functions or methods. Use the built-in testing package to write unit tests in GoLang.

Example unit test:

func TestAddUser(t *testing.T) {
    db, mock, _ := sqlmock.New()
    defer db.Close()

    repo := UserRepository{db: db}

    mock.ExpectExec("INSERT INTO users").WillReturnResult(sqlmock.NewResult(1, 1))

    user := User{Name: "Alice", Email: "alice@example.com"}
    err := repo.AddUser(user)
    if err != nil {
        t.Errorf("Error adding user: %v", err)
    }
}
Enter fullscreen mode Exit fullscreen mode

Section 3: Conducting Integration Tests with MariaDB

Integration tests ensure that different components of your application work harmoniously. Use a test database and the same SQL queries as in production.

Example integration test:

func TestGetUsers(t *testing.T) {
    db, mock, _ := sqlmock.New()
    defer db.Close()

    repo := UserRepository{db: db}

    rows := sqlmock.NewRows([]string{"id", "name", "email"}).AddRow(1, "Alice", "alice@example.com")
    mock.ExpectQuery("SELECT id, name, email FROM users").WillReturnRows(rows)

    users, err := repo.GetUsers()
    if err != nil {
        t.Errorf("Error getting users: %v", err)
    }

    if len(users) != 1 {
        t.Errorf("Expected 1 user, got %d", len(users))
    }
}
Enter fullscreen mode Exit fullscreen mode

Section 4: Running Tests and Ensuring Data Integrity

Use the go test command to run tests. For integration tests, consider using a Dockerized MariaDB instance to maintain a clean test environment.

Section 5: Conclusion

Unit and integration testing play a pivotal role in ensuring your GoLang RestAPI project functions flawlessly and maintains data integrity. Thorough testing enhances code reliability and provides a safety net for future development. In the final article of this series, we'll explore running your tests in a continuous integration (CI) environment.

Top comments (0)