登录
首页 >  Golang >  Go问答

如何接收 testify 框架“assert”方法中的方法返回的多个值作为参数?

来源:stackoverflow

时间:2024-04-07 13:06:32 435浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何接收 testify 框架“assert”方法中的方法返回的多个值作为参数?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

下面是一个示例代码,它返回多个值。

func (c calc) createtenanthandler(item *models.tenantinput) (*models.response, *models.errordetails) {

        ...
        ...
        ...

        return &models.response{responsestatus: 201, tenantoutput: tenantoutput,}, nil

    }

在测试文件中,我尝试做以下事情。

assert.Equal(t,[nil,nil],testObject.CreateTenantHandler(nil) );

我还检查了其他答案,但找不到我需要的内容。


解决方案


你不知道。它与 testify 无关——这就是 go 的工作原理。将多个变量设置为返回值,然后单独断言每个变量:

x, y := testobject.createtenanthandler(nil)
assertequal(t, x, expectedx)
assertequal(t, y, expectedy)

问题是您希望将多个返回值转换为可由assert.equal 使用的单个值。

您可以通过将多个值传递给可变参数函数来实现此目的,该函数将所有值(无论有多少)转换为单个接口切片。然后,该切片被视为单个值,并且与 testify assert.equal 配合得很好。

其他地方提到的 shim 函数很接近,但它有固定数量的参数。下面的 makeis() 代码更少、更干净、更简单,并且可以处理任意数量的返回值/参数。将此函数放入您的测试包中。

// makeis will convert any number of parameters to a []interface{}
    func makeis(v ...interface{}) []interface{} {
        return v
    }

现在断言像这样工作

assert.Equal(t, makeIS(eX,eY), makeIS(iReturnTwoValues())

作证者非常清楚如何进行比较并报告各个参数的差异。请注意,这还有一个额外的好处,即“看起来像”您想要使用函数左侧的两个目标值来测试的调用。

今天关于《如何接收 testify 框架“assert”方法中的方法返回的多个值作为参数?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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