作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我们正在尝试测试引发 index out of range
错误的函数。
单元测试的代码很简单,大概是这样的:
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestIndexOutOfRange(t *testing.T) {
assert.PanicsWithValue(t, "index out of range", func() { indexOutOfRange(9) })
}
但不幸的是测试失败并出现奇怪的错误
=== RUN TestIndexOutOfRange
--- FAIL: TestIndexOutOfRange (0.00s)
<autogenerated>:1:
Error Trace: badindex_test.go:55
Error: func (assert.PanicTestFunc)(0x1c440d0) should panic with value: "index out of range"
Panic value: "index out of range"
Test: TestIndexOutOfRange
可以看到panic值和error一样,但是测试还是失败。
知道发生了什么事吗?
最佳答案
索引超出范围错误的类型为 runtime.errorString
。应用程序将该值与 string
类型的值进行比较。此比较的计算结果为假。
要修复,请捕获索引超出范围错误并与之进行比较。
var indexOutOfRangeValue = func() (v interface{}) {
defer func() {
v = recover()
}()
x := []int{}
return x[1]
}()
func TestIndexOutOfRange(t *testing.T) {
assert.PanicsWithValue(t, indexOutOfRangeValue, func() { indexOutOfRange(9) })
}
此代码假定索引超出范围的 panic 值比较相等。不能保证此假设在 Go 的 future 版本中会成立,但运行时似乎不太可能打破此假设。
关于unit-testing - 使用 PanicsWithValue 进行 Golang 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55596268/
我们正在尝试测试引发 index out of range 错误的函数。 单元测试的代码很简单,大概是这样的: import ( "testing" "github.com/stret
我是一名优秀的程序员,十分优秀!