当前位置:网站首页>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边栏推荐
- Library management backstage
- 梯度下降法介绍-黑马程序员机器学习讲义
- Spirit breath development log (16)
- The trunk warehouse can also be tob, and Tencent cloud microenterprises do not leave quality behind
- 黑马程序员机器学习讲义:线性回归api初步使用
- Tencent cloud audio and video award-winning evaluation | leave online messages or submit evaluation, win Dajiang UAV /iphone/switch and other awards
- Idea创建Servlet 后访问报404问题
- After purchasing Tencent ECs, how to solve packet loss in Internet access?
- 2020年Android面试题汇总(中级)
- Precautions for online education and training industry filing
猜你喜欢

Are you ready for the exam preparation strategy of level II cost engineer in 2022?

Introduction to the "penetration foundation" cobalt strike Foundation_ Cobalt strike linkage msfconsole
2020年Android面试题汇总(中级)

Facebook internal announcement: instant messaging will be re integrated

重新认识WorkPlus,不止IM即时通讯,是企业移动应用管理专家

Introduction à la méthode de descente par Gradient - document d'apprentissage automatique pour les programmeurs de chevaux noirs

少儿编程课程改革后的培养方式

What is the data center

Final summary of freshman semester (supplement knowledge loopholes)

Training methods after the reform of children's programming course
随机推荐
阿里云混合云首席架构师张晓丹:政企混合云技术架构的演进和发展
After purchasing Tencent ECs, how to solve packet loss in Internet access?
一款支持内网脱机分享文档的接口测试软件
How to operate ECs and what types of system configuration schemes can be supported
LeetCode 1791. Find the central node of the star chart
How to create an FTP server on the ECS? Is it safe to create an FTP server on the ECS?
LeetCode 1662. Check whether two string arrays are equal
Spirit breath development log (16)
How to change the IP address of ECS? What are the precautions for changing the IP address
ribbon
Ribbon
Pg-pool-ii read / write separation experience
What are the functions of ASP files on ECs? What if the ECS cannot run ASP with a low version?
What is an evpn switch?
Activity recommendation | cloud native community meetup phase VII Shenzhen station begins to sign up!
Training methods after the reform of children's programming course
How to file ECS? What should be paid attention to when selecting ECS
mini-Web框架:装饰器方式的添加路由 | 黑马程序员
MySQL - SQL execution process
Before creating an image, it is recommended to execute the following code to purify the image as an administrator