Home >Backend Development >Golang >One article to understand unit testing in GO (unit testing)

One article to understand unit testing in GO (unit testing)

藏色散人
藏色散人forward
2022-11-01 17:25:173454browse

Unit testing refers to the inspection and verification of the smallest testable unit in the software

The unit is the smallest artificially specified functional module to be tested

General For example, the specific meaning must be determined based on the actual situation. For example, in C language, unit refers to a function, and in Go, unit is also a function. Unit testing is the lowest level test to be performed in the software development process. Activities, independent units of software are tested in isolation from other parts of the program.

Unit testing, we usually call it unit testing. When developing, we also need to write some demos to test functions or certain small functions in our projects [Recommended:
golang Tutorial

go test unit testThe unit test in the GO language uses the standard library

testing

There are the following simple rules:

Import the test standard library
  • The name of the single test file, followed by
  • _test
  • In the single test file The function name starts with Test, and the parameters must be
  • t *testing.T
##Simple example:

Write a simple Example, add suffix and prefix
.├── cal.go
├── cal_test.go
├── lll
└── sub.go

cal.go

package mainfunc Addprefix(str string) string {

    return "hello_"+str}func Addsuffix(str string) string {

    return str+"_good"}
cal_test.go

package mainimport "testing"func TestAddprefix(t *testing.T) {
        Addprefix("xiaomotong")}func TestAddsuffix(t *testing.T) {
        Addsuffix("xiaomotong")}
sub. go

package mainfunc MyAdd(a int, b int) int  {

    if a+b > 10{
        return 10
    }

    return a+b}func MySub(one int, two int) int{

    if one - two <strong></strong>sub_test.go<p></p><pre class="brush:php;toolbar:false">package mainimport "testing"import "fmt"func TestMyAdd(t *testing.T) {
    num := MyAdd(4 ,9)
    fmt.Println(num)

    num = MyAdd(4 ,2)
    fmt.Println(num)}
Perform unit test

go test -v
-v
  • -v is the parameter that will display the test results of each use case, display the executed single test function, whether it passed and when the single test was performed

The running results are as follows

=== RUN   TestAddprefix
--- PASS: TestAddprefix (0.00s)=== RUN   TestAddsuffix
--- PASS: TestAddsuffix (0.00s)=== RUN   TestMyAdd
10
6
--- PASS: TestMyAdd (0.00s)PASS
ok      my_new_first/golang_study/later_learning/gotest 0.002s
Executing go test in the package directory will execute all unit test files in the package

Only run the specified unit test function

We can Use this:

go test -run TestMyAdd -v

The result is as follows:

=== RUN   TestMyAdd
10
6
--- PASS: TestMyAdd (0.00s)PASS
ok      my_new_first/golang_study/later_learning/gotest 0.002s

Subtest

In the single test function we wrote, call the Run method in the testing package to run the subtest

Let’s modify the above

sub_test.go

package mainimport "testing"import "fmt"func TestMyAdd(t *testing.T) {
    num := MyAdd(4 ,9)
    fmt.Println(num)

    num = MyAdd(4 ,2)
    fmt.Println(num)}func TestMySub(t *testing.T) {
        t.Run("one", func(t *testing.T) {
                if MySub(2, 3) != 1 {
                        t.Fatal("cal error")
                }

        })
        t.Run("two", func(t *testing.T) {
                if MySub(3, 1) != 2 {
                        t.Fatal(" error ")
                }
        })}
Call the sub-test function separately and execute go test -run TestMySub/one -v

=== RUN   TestMySub=== RUN   TestMySub/one
--- PASS: TestMySub (0.00s)
    --- PASS: TestMySub/one (0.00s)PASS
ok      my_new_first/golang_study/later_learning/gotest 0.003s
to generate a report and calculate coverage

Generate coverage report file

  • go test -v -covermode=count -coverprofile=cover.out

Use go tool to convert to html format

  • go tool cover -html=cover.out -o cover.html

Open the html file in the browser and you can view the following report

The green part in the picture is covered, the red part is not covered, our example has fully covered the specific function functionsOne article to understand unit testing in GO (unit testing)

go test The following instructions , we can also look at the help documentation

Many companies have begun to improve performance. Single testing, automated testing, and CI/CD all need to be started quickly. It is best to Made into one-click release and one-click rollback. I envy these places with very complete infrastructure, hahaha~One article to understand unit testing in GO (unit testing)

The above is the detailed content of One article to understand unit testing in GO (unit testing). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete