How do I add tests to this codebase? - moby/moby

Moby is an open-source project that includes containers, runtimes, and tools for building, deploying, and running Docker containers. To ensure the reliability and maintainability of the codebase, it's essential to write and run tests. In this documentation, we'll guide you through the process of adding tests to the Moby project using Go's testing framework.


Before you start writing tests, make sure you have the following prerequisites:

  1. Go: Moby is written in Go, so you need to have Go installed on your system. You can download it from the official website.
  2. Git: Moby is a Git-based project, so you need to have Git installed on your system. You can download it from the official website.
  3. Familiarity with Go: You should have a good understanding of Go programming language and its syntax.

Writing Tests

To write tests for Moby, you need to create a new file with the _test.go suffix in the same directory as the package you want to test. For example, if you want to test the image package, create a new file named image_test.go.

// image_test.go
package image

import "testing"

func TestNewImage(t *testing.T) {
    // Test code here

In the TestNewImage function, you can write your test cases using the testing.T struct. This struct provides various methods for asserting that your code is working correctly.

// image_test.go
package image

import "testing"

func TestNewImage(t *testing.T) {
    img, err := NewImage("testdata/testimage.tar.gz")
    if err != nil {
        t.Fatalf("Failed to create image: %v", err)

    // Test image properties
    if img.Name() != "testimage" {
        t.Errorf("Expected image name to be 'testimage', got '%s'", img.Name())

    // Test image size
    if img.Size() != 1024 {
        t.Errorf("Expected image size to be 1024, got %d", img.Size())

Running Tests

To run your tests, use the go test command in the terminal. This command will discover all the tests in the current directory and its subdirectories and run them.

$ go test

Testing Best Practices

When writing tests for Moby, keep the following best practices in mind:

  1. Test each function: Write a test for every function in your package.
  2. Test edge cases: Test your functions with edge cases and unexpected inputs.
  3. Test error handling: Test how your functions handle errors and edge cases.
  4. Test interactions: Test how your functions interact with other parts of the system.
  5. Test performance: Test the performance of your functions under different loads and conditions.


For more information on testing in Go, refer to the official documentation. For more information on testing in Moby, refer to the Moby testing documentation.