53. Go - Unit Testing

Unit testing is a way to test "units" of a program code. Units are small sections.

Requires:
- program code
- testing code

Testing Code requirements:
- import "testing"
- Testing function must start with "TestXxx" and arguments must be (t *testing.T)

// t.Log(), logs errors into default output (this is stdout by default, can change)
// t.Fail(), marks the function as failed.

// t.Error("TEST STRING"), is a t.Log() followed by a t.Fail()
// t.Errorf(), format version

Running Tests:
go test

Program Code Example:
package main

import "fmt"

func main() {
    x := "testing string"
    fmt.Println(reverseString(x))
}

func reverseString(x string) string {
    var answer string
    for i := len(x) - 1; i >= 0; i-- {
        answer += string(x[i])
    }
    return answer
}


Testing Code Example:
package main

import "testing"

func TestReverseString(t *testing.T) {
    x := reverseString("testing string")
    if x != "gnirts gnitset" {
        t.Log("ERROR, SHOULD BEEN gnirts gnitset. GOT ", x, "INSTEAD.")
        t.Fail()
    }
}


// Both files are in the same directory/folder and using same package.

Table Tests:
- basically batch testing with structs.
package main

import "testing"

type testStruct struct {
    testString string
    actual     string
}

var testList = []testStruct{
    {"bobb", "bbob"},
    {"abc", "cba"},
    {"123", "321"},
}

func TestReverseString(t *testing.T) {
    for _, e := range testList {
        x := reverseString(e.testString)
        if x != e.actual {
            t.Errorf("ERROR: TEST FAILED. GOT %v instead of %v", x, e.actual)
        }
    }
}



Cover Analysis:
Analysis showing how much of your code are covered by tests. Basically, how many units of your code have been tested to pass.

Commands:
// go test -cover
// this does cover analysis, showing percentage of code covered by tests

// go test -coverprofile FILENAME.out
// exports the analysis to a file.

// go tool cover -html=FILENAME.out
// converts analysis file to html format for visualization

Comments

Popular posts from this blog

2. FreeCodeCamp - Dynamic Programming - Learn to Solve Algorithmic Problems & Coding Challenges

20. Data Analytics - Analyze Data to Answer Questions - Week 1

3. Algorithms - Selection Sort