使用PanicsWithValue进行Golang单元测试

清除Sepulveda:

我们正在尝试测试引发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值和错误显示相同,但​​测试仍然失败。
有什么想法吗?

松饼上衣:

索引超出范围错误的类型为runtime.errorString应用程序将值与type的值进行比较string此比较结果为false。

要解决此问题,请捕获索引超出范围的错误并进行比较。

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) })
}

该代码假定索引范围外的紧急值比较相等。无法保证该假设在Go的未来版本中将是正确的,但是运行时似乎不太可能打破此假设。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章