Unit testing 在单元测试中使用随机数与硬编码值
当我写测试时,我喜欢用随机数来计算 e、 g 因为需要根据随机值计算测试的预期值 如果您因这种方法而受到批评: 这使得测试变得不必要的复杂 由于随机性,可复制性较差 我想如果没有随机性,我实际上可以: 填写我的结果,例如,测试仅适用于特定值。随机性证明我的测试是可靠的 捕获更多有争议的边缘情况,因为边缘情况通常是特定的,例如0,1,-1 使用随机数真的那么糟糕吗Unit testing 在单元测试中使用随机数与硬编码值,unit-testing,go,testing,random,Unit Testing,Go,Testing,Random,当我写测试时,我喜欢用随机数来计算 e、 g 因为需要根据随机值计算测试的预期值 如果您因这种方法而受到批评: 这使得测试变得不必要的复杂 由于随机性,可复制性较差 我想如果没有随机性,我实际上可以: 填写我的结果,例如,测试仅适用于特定值。随机性证明我的测试是可靠的 捕获更多有争议的边缘情况,因为边缘情况通常是特定的,例如0,1,-1 使用随机数真的那么糟糕吗 我意识到这是一个观点问题,但我对人们的观点非常感兴趣,不介意投反对票。你的问题并不具体。这适用于任何语言和任何类型的单元测试 需要根据
我意识到这是一个观点问题,但我对人们的观点非常感兴趣,不介意投反对票。你的问题并不具体。这适用于任何语言和任何类型的单元测试 需要根据随机值计算测试的预期值 这是主要问题。当应用程序中的逻辑发生变化时,如果您甚至有中等复杂的应用程序逻辑,那么您也必须在测试中改变相同的逻辑。您必须实现这些更改两次 假设每一个都是同样复杂的,并且每一个的实现都有所不同,因为如果您只是在测试中复制粘贴或重用应用程序中的代码来计算期望值,那么他们会同意,并且测试是毫无意义的 在单元测试中使用固定值进行测试可以使测试保持简单并练习代码
使用随机值进行测试,称为。我不是测试中模糊化的专家。使用随机值进行测试是模糊化的一个方面,但细微差别在于测试可能发现边缘情况、捕获bug、执行未使用的代码分支或发现漏洞的随机值 单元测试和模糊测试之间有区别。每个都有价值,但重要的是不要将两者混为一谈。这个问题似乎基本上是基于观点的,但请参见软件工程,或此处。
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)