为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
牛魔王的故事 2022-08-24 12:51:56
我有一个集成测试,每次运行时都需要不同的UUID,但下面的代码每次都会生成相同的uuid。package serviceimport (    "fmt"    "testing"    "github.com/google/uuid")func TestOne(t *testing.T) {    id, _ := uuid.NewRandom()    fmt.Println(id)}以下是Go Playground中的类似代码:https://play.golang.org/p/85yecbn4F80如何让它在每次执行时返回一个新值?
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

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


正如用户在评论中指出的那样,Go Playground中的输出被缓存。如果在自己的命令行上尝试此操作,则会在每次运行时打印一个新的 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 playground缓存无效。这将导致生成新的 UUID。


查看完整回答
反对 回复 2022-08-24
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

将问题的再现性放在一边,因为您的问题专门与测试有关,为了完整性,我将添加到现有答案中,该答案也命令缓存结果 - 即使它并不总是如此(见下文)。我不使用VSCode,所以我无法判断IDE本身是否执行了一些缓存,但请考虑一下,如果您从命令行运行单元测试,并且测试通过,则第二次运行它时,打印的输出也将是相同的。go testuuid.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=1go test -v ./uuidtest/ -count=1


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信