Go Testing: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 32: Line 32:
The test files should import <code>testing</code>.
The test files should import <code>testing</code>.


Add individual tests, as functions starting with <code>Test...</code> and taking an argument <code>t *testing.T</code>:
Add individual tests, as functions starting with <code>TestX..</code>, where <code>X...</code> does not start with a lowercase letter, and taking an argument <code>t *testing.T</code>:


<syntaxhighlight lang='go'>
<syntaxhighlight lang='go'>
func Test...(t *testing.T) {
func TestX...(t *testing.T) {
   ...
   ...
   t.Error("expected this: %q, got that: %q ", ...)
   t.Error("expected this: %q, got that: %q ", ...)

Revision as of 22:33, 19 September 2023

External

Internal

Overview

Go comes with a lightweight test framework that includes the go test command and the testing package. The tests live in *_test.go files.

Write a Unit Test

Write a module as shown here:

Declaring a Module

For each file containing behavior to test (a.go)

package a

func Reverse(s string) string {
 rs := []rune(s)
 var result []rune
 for i := len(rs) - 1; i >= 0; i-- {
  result = append(result, rs[i])
 }
 return string(result)
}

add a <file-name>_test.go test file. In this case a_test.go. These files are ignored by the compiler and only compiled and executed when go test is run.

The test files should be part of the same package.

The test files should import testing.

Add individual tests, as functions starting with TestX.., where X... does not start with a lowercase letter, and taking an argument t *testing.T:

func TestX...(t *testing.T) {
  ...
  t.Error("expected this: %q, got that: %q ", ...)
}
package a

import "testing"

func TestReverseEmptyString(t *testing.T) {
 expected := ""
 result := Reverse("")
 if result != expected {
  t.Errorf("expected %q, got %q", expected, result)
 }
}

func TestReverseOneCharString(t *testing.T) {
 expected := "a"
 result := Reverse("a")
 if result != expected {
  t.Errorf("expected %q, got %q", expected, result)
 }
}

func TestReverseTwoCharString(t *testing.T) {
 expected := "ba"
 result := Reverse("ab")
 if result != expected {
  t.Errorf("expected %q, got %q", expected, result)
 }
}

From the module directory, run the tests:

go test

PASS
ok  	example.com/a	0.116s

TO DO