当前位置:网站首页>Use of golang testing framework test
Use of golang testing framework test
2022-06-24 04:55:00 【Johns】
1. Why do I need an assertion Library ?
Officially :Go No assertion provided , We know this will bring some inconvenience , Its main purpose is to prevent you programmers from being lazy in error handling . It is convenient for us to introduce assertions —— Improve test efficiency , Enhance code readability .
testify Yes, it is go The realization of a assert Style test framework , This package provides the assertions we need , Provides very rich assertion methods , It is very simple to use and easy to understand .
2. How to use testify To assert that ?
- install
go get github.com/stretchr/testify
2.Quick start
package algo import ( "github.com/stretchr/testify/assert" "testing" ) /** * @Description * @Author guirongguo * @Email [email protected] * @Date 2021/8/30 23:00 **/ // Easy to use func TestSimpleRand(t *testing.T) { t.Log("start ...") assert := assert.New(t) assert.Equal(1, 1) assert.NotEqual(1, 2) assert.NotNil("123") assert.IsType([]string{}, []string{""}) assert.Contains("Hello World", "World") assert.Contains(map[string]string{"Hello": "World"}, "Hello") assert.Contains([]string{"Hello", "World"}, "Hello") assert.True(true) assert.True(false) t.Log("next ...") var s []string assert.Empty(s) assert.Nil(s) t.Log("end ...") } // Generally, the table driven method is used to put the test cases of the same unit together func TestCalculate(t *testing.T) { assert := assert.New(t) var tests = []struct { input int expected int }{ {2, 4}, {-1, 1}, {0, 2}, {-5, -3}, {99999, 100001}, } for _, test := range tests { assert.Equal(Calculate(test.input), test.expected) } }
Running results
=== RUN TestSimpleRand
simple_random_test.go:16: start ...
simple_random_test.go:27:
Error Trace: simple_random_test.go:27
Error: Should be true
Test: TestSimpleRand
simple_random_test.go:28: next ...
simple_random_test.go:32: end ...
--- FAIL: TestSimpleRand (0.00s)
=== RUN TestCalculate
simple_random_test.go:50:
Error Trace: simple_random_test.go:50
Error: Not equal:
expected: 1
actual : 4
Test: TestCalculate
simple_random_test.go:50:
Error Trace: simple_random_test.go:50
Error: Not equal:
expected: -2
actual : 1
Test: TestCalculate
simple_random_test.go:50:
Error Trace: simple_random_test.go:50
Error: Not equal:
expected: -1
actual : 2
Test: TestCalculate
simple_random_test.go:50:
Error Trace: simple_random_test.go:50
Error: Not equal:
expected: -6
actual : -3
Test: TestCalculate
simple_random_test.go:50:
Error Trace: simple_random_test.go:50
Error: Not equal:
expected: 99998
actual : 100001
Test: TestCalculate
--- FAIL: TestCalculate (0.00s)
Expected :99998
Actual :100001
<Click to see difference>
FAILYou can see that an assertion failure will throw an error message , And continue to execute the following assertions .
3. suite Kit package
github.com/stretchr/testify/suite Provides test suite functionality , You can perform actions at the beginning and end of the entire suite , You can also perform actions at the beginning and end of each test . Usage is as follows :
package algo import ( "fmt" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" "testing" ) /** * @Description * @Author guirongguo * @Email [email protected] * @Date 2021/8/30 23:00 **/ type _Suite struct { suite.Suite } // SetupSuite() and TearDownSuite() The overall situation will only be executed once // SetupTest() TearDownTest() BeforeTest() AfterTest() Execute once for each test in the suite func (s *_Suite) AfterTest(suiteName, testName string) { fmt.Printf("AferTest: suiteName=%s,testName=%s\n", suiteName, testName) } func (s *_Suite) BeforeTest(suiteName, testName string) { fmt.Printf("BeforeTest: suiteName=%s,testName=%s\n", suiteName, testName) } // SetupSuite() Only once func (s *_Suite) SetupSuite() { fmt.Printf("SetupSuite() ...\n") } // TearDownSuite() Only once func (s *_Suite) TearDownSuite() { fmt.Printf("TearDowmnSuite()...\n") } func (s *_Suite) SetupTest() { fmt.Printf("SetupTest()... \n") } func (s *_Suite) TearDownTest() { fmt.Printf("TearDownTest()... \n") } func (s *_Suite) TestSimpleRand() { fmt.Printf("TestSimpleRand()... \n") ret := SimpleRand(1, 10) // 4. assert.Equal(s.T(), ret, int64(10)) } func (s *_Suite) TestCalculate() { fmt.Printf("TestCalculate()... \n") ret := Calculate(1) //9. assert.Equal(s.T(), ret, 0) } // Give Way go test Perform the test func TestAll(t *testing.T) { suite.Run(t, new(_Suite)) }
Running results
GOROOT=/usr/local/go #gosetup
GOPATH=/Users/guirong/go #gosetup
/usr/local/go/bin/go test -c -o /private/var/folders/kk/5llx7c2j0r90sp2hhlptlc1m0000gn/T/____Suite_in_testcase_demo_cmd_algo testcase-demo/cmd/algo #gosetup
/usr/local/go/bin/go tool test2json -t /private/var/folders/kk/5llx7c2j0r90sp2hhlptlc1m0000gn/T/____Suite_in_testcase_demo_cmd_algo -test.v -test.run ^\QTestAll\E$ -testify.m ^TestSimpleRand|TestCalculate$
=== RUN TestAll
SetupSuite() ...
--- PASS: TestAll (0.00s)
=== RUN TestAll/TestCalculate
SetupTest()...
BeforeTest: suiteName=_Suite,testName=TestCalculate
TestCalculate()...
AferTest: suiteName=_Suite,testName=TestCalculate
TearDownTest()...
--- PASS: TestAll/TestCalculate (0.00s)
=== RUN TestAll/TestSimpleRand
SetupTest()...
BeforeTest: suiteName=_Suite,testName=TestSimpleRand
TestSimpleRand()...
AferTest: suiteName=_Suite,testName=TestSimpleRand
TearDownTest()...
TearDowmnSuite()...
--- PASS: TestAll/TestSimpleRand (0.00s)
PASS
Process finished with exit code 0边栏推荐
- LeetCode 1290. Binary linked list to integer
- RedHat 8 time synchronization and time zone modification
- Real time monitoring: system and application level real-time monitoring based on flow computing Oceanus (Flink)
- Brief introduction: how much do you know about supply chain attacks
- How to change the IP address of ECS? What are the precautions for changing the IP address
- apipost接口断言详解
- Critical service failed
- Here's all you want to know about takin data (1) startup command
- Idea创建Servlet 后访问报404问题
- Bi-sql order by
猜你喜欢

『渗透基础』Cobalt Strike基础使用入门_Cobalt Strike联动msfconsole

An interface testing software that supports offline document sharing in the Intranet

外网访问svn服务器(外网访问部署在云上的svn服务器)
2020年Android面试题汇总(中级)

Zhang Xiaodan, chief architect of Alibaba cloud hybrid cloud: evolution and development of government enterprise hybrid cloud technology architecture

SAP MTS/ATO/MTO/ETO专题之十:ETO模式 Q+空模式 未估价库存 策略自定义

让孩子们学习Steam 教育的应用精髓

Abnova membrane protein lipoprotein solution

SAP mts/ato/mto/eto topic 7: ATO mode 1 m+m mode strategy 82 (6892)

"Emergency response practice" logparser log analysis practice
随机推荐
What is the new generation cloud computing architecture cipu of Alibaba cloud?
What are the functions and advantages of the Internet of things cloud platform?
Develop a customized music player from scratch, and your girlfriend will have it?
How to use and apply for ECS? What parameters can be configured
apipost接口断言详解
How to build an ECS and how to control the server through the local host
IP and traffic reconciliation tool networktrafficview
Bi-sql where
What does VPS server mean? What is the difference between a VPS server and an ECS?
Activity recommendation | cloud native community meetup phase VII Shenzhen station begins to sign up!
Application practice of helium decentralized lorawan network in Tencent cloud IOT development platform
How to control CDN traffic gracefully in cloud development?
Facebook内部通告:将重新整合即时通讯功能
Replication of variables in golang concurrency
Bi-sql and & or & in
How to select a suitable optical fiber tester
Real time monitoring: system and application level real-time monitoring based on flow computing Oceanus (Flink)
Collagenase -- four types of crude collagenase from Worthington
Customer disaster recovery case - a MySQL database migration scheme
What does IIS mean and what is its function? How does IIS set the size of the web site space on the server?