登录
首页 >  Golang >  Go问答

使用 `func(w http.ResponseWriter, r *http.Request)` 进行模拟测试的方法

来源:stackoverflow

时间:2024-03-10 21:00:26 450浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《使用 `func(w http.ResponseWriter, r *http.Request)` 进行模拟测试的方法》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

当我想从我的嘲笑中获得响应主体时,我遇到了问题, 目前我已经创建了一些像这样的模拟:

func (m *mockcarservice) getcar(ctx context.context, store store.store, idcar uint) (interface{}, error) {

    call := m.called(ctx, store)
    res := call.get(0)
    if res == nil {
        return nil, call.error(1)
    }
    return res.(*models.cars), call.error(1)
}

然后我像这样创建 handler_test.go :

func testgetcar(t *testing.t) {

    var store store.store

    car := &models.cars{
        id:          12345,
        brandid:     1,
        name:        "car abc",
        budget:      2000,
        costpermile: 4000,
        kpireach:    6000,
    }

    mockservice := func() *service.mockcarservice {
        svc := &service.mockcarservice{}
        svc.on("getcar", context.background(), car.id).return(car, nil)
        return svc
    }

    handlerget := newcarhandler(mockservice())
    actualresponse := handlerget.getcar(store) 

    expected := `{"success":true,"data":[],"errors":[]}` 
    assert.equal(t, expected+"\n", actualresponse)
}

我得到的是一些错误(http.handlerfunc)(0x165e020)(不能将func类型作为参数)

我不知道如何解决它。因为我使用这样的处理程序:

func (ah *CampaignHandler) GetCampaigns(store store.Store) func(w http.ResponseWriter, r *http.Request) {
    return func(w http.ResponseWriter, r *http.Request) {  .....

解决方案


如果您正在对外部服务进行 HTTP 调用并希望对其进行测试并获得模拟响应,则可以使用 httptest

go 中的 http 包附带了 httptest 来测试所有外部 http 调用依赖项。

请在此处查找示例:https://golang.org/src/net/http/httptest/example_test.go

如果这不是您的用例,最好使用存根,可以在此处找到执行此操作的方法:https://dev.to/jonfriesen/mocking-dependencies-in-go-1h4d

基本上,这意味着使用接口并拥有自己的结构和存根函数调用,这将返回您想要的响应。

如果你想在测试中添加一些语法糖,你可以使用 testify :https://github.com/stretchr/testify

希望这有帮助。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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