设为首页 加入收藏

TOP

golang单元测试一(简单函数测试)(二)
2023-07-23 13:29:47 】 浏览:125
Tags:golang 单元测 简单函
aultPort != uri.Port { authority.Host = net.JoinHostPort(uri.Host, strconv.Itoa(uri.Port)) } else { // JoinHostPort() automatically add brackets to the host if it's // an IPv6 address. // // If not port is specified, JoinHostPort() return an IP address in the // form of "[::1]:", so we use TrimSuffix() to remove the extra ":". authority.Host = strings.TrimSuffix(net.JoinHostPort(uri.Host, ""), ":") } if uri.Vhost != defaultURI.Vhost { // Make sure net/url does not double escape, e.g. // "%2F" does not become "%252F". authority.Path = uri.Vhost authority.RawPath = url.QueryEscape(uri.Vhost) } else { authority.Path = "/" } return authority.String() }

先不用考虑上面函数的复杂性,我们的目的很简单,就是要测试ParseURI函数。那如何测试呢?首先我们需要创建一个uri_test.go文件,一般和需要测试的uri.go在同一个目录下。其次文件的包名也需要和uri.go 一致。

然后我们就可以编写测试函数了,上面说了测试函数需要以Test开头。

我们先写一个简单的测试函数:

package uri

import (
	"testing"
)

// Test matrix defined on http://www.rabbitmq.com/uri-spec.html
type testURI struct {
	url      string
	username string
	password string
	host     string
	port     int
	vhost    string
	canon    string
}

var uriTest = testURI{
	url:      "amqp://user:pass@host:10000/vhost",
	username: "user",
	password: "pass",
	host:     "host",
	port:     10000,
	vhost:    "vhost",
	canon:    "amqp://user:pass@host:10000/vhost",
}

func TestUri(t *testing.T) {
	u, err := ParseURI(uriTest.url)
	if err != nil {
		t.Fatal("Could not parse spec URI: ", uriTest.url, " err: ", err)
	}

	if uriTest.username != u.Username {
		t.Error("For: ", uriTest.url, " usernames do not match. want: ", uriTest.username, " got: ", u.Username)
	} else {
		t.Log("For: ", uriTest.url, " usernames match. want: ", uriTest.username, " got: ", u.Username)
	}
}

首先我们看到包名是uri,然后我们定义了一个以Test开头的测试函数TestUri。函数的入参就代表这是一个单元测试。

然后我们定义一个需要测试的url的结构testURI,然后初始化结构体uriTest。其中uriTest.url就是需要传入ParseURI的参数,另外的一些参数就是解析之后希望返回的结果。

可以看到上面有几个方法:

  • t.Fatal,测试错误并退出
  • t.Error,测试错误会继续往下执行
  • t.Log,一般代表测试成功打印日志

3、运行测试代码

然后我们在命令行执行下这个测试函数:

go test -run TestUri                         
PASS
ok      go-demo/testexample/uri 0.390s

从执行结果我们可以看到测试成功了,但是并没有打印成功的日志。这是因为我们需要加上一个参数,修改如下:

go test -v  -run TestUri
=== RUN   TestUri
    uri_test.go:37: For:  amqp://user:pass@host:10000/vhost  usernames match. want:  user  got:  user
--- PASS: TestUri (0.00s)
PASS
ok      go-demo/testexample/uri 0.120s

可以看到测试成功的日志打印出来了。

-run代表可以指定某个具体的测试函数执行,如果去掉的话也可以,会执行这个目录下所有的测试函数

4、表驱动测试

如果我们想执行一批测试代码,这个时候应该怎么写呢?很简单,我们只需要定义一个切片就行:

package uri

import (
	"testing"
)

// Test matrix defined on http://www.rabbitmq.com/uri-spec.html
type testURI struct {
	url      string
	username string
	password string
	host     string
	port     int
	vhost    string
	canon    string
}

var uriTests = []testURI{
	{
		url:      "amqp://user:pass@host:10000/vhost",
		username: "user",
		password: "pass",
		host:     "host",
		port:     10000,
		vhost:    "vhost",
		canon:    "amqp://user:pass@host:10000/vhost",
	},

	{
		url:      "amqp://",
		username: defaultURI.Username,
		password: defaultURI.Password,
		host:     defaultURI.Hos
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇golang中的init初始化函数 下一篇golang的内存管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目