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

在单元测试中使用随机数与硬编码值

在单元测试中使用随机数与硬编码值

Go
烙印99 2023-06-26 17:43:45
当我编写测试时,我喜欢使用随机数来计算。例如 func init() {   rand.Seed(time.Now().UnixNano()) }  func TestXYZ(t *testing.T) {     amount := rand.Intn(100)     cnt := 1 + rand.Intn(10)     for i := 0; i < cnt; i++ {       doSmth(amount)     }     //more stuff  }这当然有一个缺点expected := calcExpected(amount, cnt)因为测试的预期值需要根据随机值计算。如果这种方法受到批评:它使测试变得不必要的复杂由于随机性,可重复性较差我认为虽然没有随机性,我实际上可以:弥补我的结果,例如测试仅适用于特定值。随机性证明我的测试是“稳健的”捕获更多边缘情况(有争议,因为边缘情况通常是特定的,例如 0,1,-1)使用随机数真的那么糟糕吗?(我意识到这是一个意见问题,但我对人们的观点非常感兴趣,不介意投反对票)。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

您的问题不是特定于 Go 的。这适用于任何语言和任何类型的单元测试。

测试的预期值需要根据随机值计算。

这是主要问题。如果您的应用程序逻辑稍微复杂,那么当应用程序中的逻辑发生变化时,您也必须在测试中更改相同的逻辑。您必须实施这些更改两次。

想必每一个都同样复杂,并且每一个的实现都有些不同,因为如果您只是在测试中复制粘贴或重用应用程序中的代码来计算预期值,那么他们就会同意并且测试毫无意义。

在单元测试中使用固定值进行测试可以使测试变得简单并练习代码。

使用随机值进行测试,称为模糊测试。我不是测试模糊方面的专家。使用随机值进行测试是模糊测试的一方面,但细微差别在于测试随机值,这些随机值可能会发现边缘情况、捕获错误、执行未使用的代码分支或发现泄漏。


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

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