登录
首页 >  Golang >  Go问答

如何在golang中每次运行测试时获取不同的UUID?

来源:stackoverflow

时间:2024-04-21 18:15:37 342浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何在golang中每次运行测试时获取不同的UUID?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我有一个集成测试,每次运行时都需要不同 uuid,但以下代码每次都会生成相同 uuid。

package service

import (
    "fmt"
    "testing"

    "github.com/google/uuid"
)

func TestOne(t *testing.T) {
    id, _ := uuid.NewRandom()
    fmt.Println(id)
}

这里是 go 演示中的类似代码:https://play.golang.org/p/85yecbn4f80

如何让它在每次执行时返回一个新值?


正确答案


从 2022 年 6 月 21 日开始编辑:使用 https://go.dev/play/ 时,脚本似乎不再被缓存。每次运行时都会打印一个新的 uuid,即使脚本保持不变也是如此。

正如用户在评论中指出的那样,go 演示中的输出会被缓存。如果在自己的命令行上尝试此操作,则每次运行都会打印一个新的 uuid。

package main

import (
    "fmt"

    "github.com/google/uuid"
)

func main() {
    id, _ := uuid.newrandom()
    fmt.println(id)
}

还有

$ go run .
604f5ea8-d146-4aac-9a15-4dc33a84eb59
$ go run .
3bc094cf-99c8-4250-98a0-9831fdadedac
$ go run .
b0c13db3-e466-4b5c-a179-e0a16469f11a

无论如何,人们可以通过更改脚本(例如添加或修改注释)来使 go 演示缓存失效。这将导致生成一个新的 uuid。

将使用演示的问题的重现性放在一边,因为您的问题专门与测试有关,为了完整起见,我将添加对于现有的答案,命令 go test 也会缓存结果 - 尽管它并不总是如此(见下文)。我不使用 vscode,所以我无法判断 ide 本身是否进行了一些缓存,但请考虑一下,如果您从命令行使用 uuid.newrandom() 运行单元测试,并且测试通过,第二次运行时,打印输出也将是相同的。

特别是,当(引用)“使用显式包参数调用”时,go test 会缓存成功结果。 ./.... 是包参数。

所以如果你有:

func testuuid(t *testing.t) {
    u, err := uuid.newrandom()
    fmt.println(u)
    assert.nil(t, err)
}

并运行 go test -v ./uuidtest/:

=>$ go test -v ./uuidtest/
=== RUN   TestUUID
b1a912ea-0dd2-4ed6-a5af-00ce106b1017
--- PASS: TestUUID (0.00s)
PASS
ok      testproj/uuidtest   0.025s
=>$ go test -v ./uuidtest/
=== RUN   TestUUID
b1a912ea-0dd2-4ed6-a5af-00ce106b1017
--- PASS: TestUUID (0.00s)
PASS
ok      testproj/uuidtest   (cached)
=>$ go test -v ./uuidtest/
=== RUN   TestUUID
b1a912ea-0dd2-4ed6-a5af-00ce106b1017
--- PASS: TestUUID (0.00s)
PASS
ok      testproj/uuidtest   (cached)

顺便说一句,终端输出足以提醒您结果确实是 (cached)

要避免成功时缓存,您可以将参数 count=1 添加到命令调用中:go test -v ./uuidtest/ -count=1

今天关于《如何在golang中每次运行测试时获取不同的UUID?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>