登录
首页 >  Golang >  Go问答

字符串类型的 require.Equal 测试

来源:stackoverflow

时间:2024-02-17 12:06:23 484浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《字符串类型的 require.Equal 测试》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我的代码很简单:

func test_decodelbpolicy(t *testing.t) {
    policy := decodelbpolicy("lb:ring_hash")
    require.equal(t, api.ring_hash, policy.type)
    require.equal(t, nil, decodelbpolicy(""))
}

最后一行出现问题,输出如下:

Error:   Not equal: 
         expected: <nil>(<nil>)
         actual  : *api.LBPolicy(nil)

然后我尝试将预期的“nil”替换为“*api.lbpolicy(nil)”,但它无法编译 但是当我将 require 更改为 require.equal(t, true,decodelbpolicy("") == nil) 时,它就通过了。


解决方案


在go中,值为nil的接口不等于nil。这是因为它具有与之关联的类型信息,而 nil 关键字没有此类类型。 (它的类型也为 nil)。

这解释了这些行

expected: <nil>(<nil>)
    actual  : *api.LBPolicy(nil)

您有一个类型为 *api.lbpolicy 且值为 nil 的参数。但您想要一个类型 niland 值 nil

如何修复有点棘手,您可以确保 decodelbpolicy 确实返回 nil 而不是值 nil 的接口。或者与良好类型且值为 nil 的接口进行比较。或者使用 == 技巧,如您所示

更多详细信息请参见这篇文章:https://glucn.medium.com/golang-an-interface-holding-a-nil-value-is-not-nil-bb151f472cc7

本篇关于《字符串类型的 require.Equal 测试》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>