Skip to content

Detects when some calls can be replaced by methods from the testing package

License

Notifications You must be signed in to change notification settings

ldez/usetesting

Repository files navigation

UseTesting

Detects when some calls can be replaced by methods from the testing package.

Sponsor

Usages

Inside golangci-lint

Recommended.

linters:
  enable:
    - usetesting

linters-settings:
  usetesting:
    # Enable/disable `os.CreateTemp("", ...)` detections.
    # Default: true
    os-create-temp: false

    # Enable/disable `os.MkdirTemp()` detections.
    # Default: true
    os-mkdir-temp: false

    # Enable/disable `os.Setenv()` detections.
    # Default: false
    os-setenv: true

    # Enable/disable `os.TempDir()` detections.
    # Default: false
    os-temp-dir: true
    
    # Enable/disable `os.Chdir()` detections.
    # Disabled if Go < 1.24.
    # Default: true
    os-chdir: false

    # Enable/disable `context.Background()` detections.
    # Disabled if Go < 1.24.
    # Default: true
    context-background: false

    # Enable/disable `context.TODO()` detections.
    # Disabled if Go < 1.24.
    # Default: true
    context-todo: false

As a CLI

go install github.com/ldez/usetesting/cmd/usetesting@latest
usetesting: Reports uses of functions with replacement inside the testing package.

Usage: usetesting [-flag] [package]

Flags:
  -contextbackground
        Enable/disable context.Background() detections (default true)
  -contexttodo
        Enable/disable context.TODO() detections (default true)
  -oschdir
        Enable/disable os.Chdir() detections (default true)
  -osmkdirtemp
        Enable/disable os.MkdirTemp() detections (default true)
  -ossetenv
        Enable/disable os.Setenv() detections (default false)
  -ostempdir
        Enable/disable os.TempDir() detections (default false)
  -oscreatetemp
        Enable/disable os.CreateTemp("", ...) detections (default true)
...

Examples

os.MkdirTemp

func TestExample(t *testing.T) {
	os.MkdirTemp("a", "b")
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
	t.TempDir()
    // ...
}

os.TempDir

func TestExample(t *testing.T) {
	os.TempDir()
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
	t.TempDir()
    // ...
}

os.CreateTemp

func TestExample(t *testing.T) {
	os.CreateTemp("", "x")
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
    os.CreateTemp(t.TempDir(), "x")
    // ...
}

os.Setenv

func TestExample(t *testing.T) {
	os.Setenv("A", "b")
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
	t.Setenv("A", "b")
    // ...
}

os.Chdir (Go >= 1.24)

func TestExample(t *testing.T) {
	os.Chdir("x")
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
	t.Chdir("x")
    // ...
}

context.Background (Go >= 1.24)

func TestExample(t *testing.T) {
    ctx := context.Background()
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
    ctx := t.Context()
    // ...
}

context.TODO (Go >= 1.24)

func TestExample(t *testing.T) {
    ctx := context.TODO()
	// ...
}

It can be replaced by:

func TestExample(t *testing.T) {
    ctx := t.Context()
    // ...
}

References