如何在 golang 中为我的测试用例正确创建模拟 http.request?

     2023-02-25     240

关键词:

【中文标题】如何在 golang 中为我的测试用例正确创建模拟 http.request?【英文标题】:How to correctlly create mock http.request in golang for my test case? 【发布时间】:2019-03-30 00:13:10 【问题描述】:

我想写一个测试用例来验证我的参数解析器功能。 以下是我模拟 http.request 的示例代码

rawUrl := "http://localhost/search/content?query=test"

func createSearchRequest(rawUrl string) SearchRequest 
    api := NewWebService()

    req, err := http.NewRequest("POST", rawUrl, nil)
    if err != nil 
        logger.Fatal(err)
    
    logger.Infof("%v", req)
    return api.searchRequest(req)

我的网络服务器使用 github.com/gorilla/mux 作为路由

router := mux.NewRouter()

router.HandleFunc("/search/query_type", searchApiService.Search).Methods("GET")

但在我的测试用例中,我无法从模拟 http.request 中获得 query_type

func (api WebService) searchRequest(req *http.Request)
    // skip ....

    vars := mux.Vars(req)
    queryType := vars["query_type"]
    logger.Infof("queryType:%v", queryType)

    //skip ....

如何在我的测试用例中获取 mux 的路径参数?

【问题讨论】:

【参考方案1】:
func TestMaincaller(t *testing.T) 
    r,_ := http.NewRequest("GET", "hello/1", nil)
    w := httptest.NewRecorder()
   //create a map of variable and set it into mux
    vars := map[string]string
    "parameter_name": "parametervalue",
    

   r = mux.SetURLVars(r, vars)
  callfun(w,r)

【讨论】:

改用httptest.NewRequest

如何在 Laravel 项目中为我自己的包运行 php 测试?

】如何在Laravel项目中为我自己的包运行php测试?【英文标题】:HowtorunphptestsinLaravelprojectformyownpackage?【发布时间】:2019-08-0714:13:18【问题描述】:我有自己的Laravel包,我希望能够为它编写和创建测试。我的项目安装在我的项目R... 查看详情

如何在“单元测试”中为按钮添加点击操作并显示警报

】如何在“单元测试”中为按钮添加点击操作并显示警报【英文标题】:Howtoaddtapactionforbuttonin"UnitTesting"andshowAlert【发布时间】:2018-03-1613:26:22【问题描述】:我正在尝试为我的登录表单编写一个单元测试用例,如果用户... 查看详情

如何在scala akka(spray)中为rest服务编写测试用例

】如何在scalaakka(spray)中为rest服务编写测试用例【英文标题】:howtowritetestcaseforrestserviceinscalaakka(spray)【发布时间】:2016-04-2416:38:22【问题描述】:如何模拟HttpRespose?我正在使用scalla、akka和spray来调用以json响应的rest服务,我... 查看详情

在nodejs中为持久功能活动创建单元测试用例

】在nodejs中为持久功能活动创建单元测试用例【英文标题】:Createunittestcasefordurablefunctionactivityinnodejs【发布时间】:2022-01-0820:58:44【问题描述】:我正在尝试使用nodejs为持久功能活动创建单元测试。但是没有找到任何关于那个... 查看详情

如何在golang中为包含通道、filewalk和api调用的程序编写单元测试?

】如何在golang中为包含通道、filewalk和api调用的程序编写单元测试?【英文标题】:Howtowriteunittestforaprogramthatcontainschannels,filewalkandapicallingolang?【发布时间】:2022-01-1023:56:46【问题描述】:我的程序整体如下。funcmain()flag.Parse()if*t... 查看详情

如何在cloudformation中为我的beantalk定义nodejs的版本

】如何在cloudformation中为我的beantalk定义nodejs的版本【英文标题】:Howtodefinetheversionofnodejsformybeanstalkincloudformation【发布时间】:2017-12-2615:41:57【问题描述】:我正在尝试使用特定版本的nodejs创建beanstalk:这是我在cloudformation中的b... 查看详情

如何在 Spring Boot 应用程序中为带有 @Configuration 注释的类编写单元测试用例

】如何在SpringBoot应用程序中为带有@Configuration注释的类编写单元测试用例【英文标题】:HowtowritetheunittestcasefortheClasseswhichareannotatedwith@ConfigurationinSpringBootapplication【发布时间】:2020-05-2619:08:47【问题描述】:我有一个配置类,它... 查看详情

如何在服务nestjs中模拟getMongoRepository

】如何在服务nestjs中模拟getMongoRepository【英文标题】:HowtomockgetMongoRepositoryinservicenestjs【发布时间】:2019-12-0100:16:05【问题描述】:我在nestjs中为我的服务编写单元测试。在我的删除函数中,我使用getMongoRepository删除。但是我坚... 查看详情

在快速测试用例中为单例目标 c 类注入依赖项

】在快速测试用例中为单例目标c类注入依赖项【英文标题】:Injectdependencyforsingletonobjectivecclassinswifttestcases【发布时间】:2017-03-1413:00:12【问题描述】:我有一个用ObjectiveC编写的单例类,它被用在辅助类中,它也是用ObjectiveC编... 查看详情

在 golang 中为 http 响应创建自定义错误

】在golang中为http响应创建自定义错误【英文标题】:Creatingacustomerroringolangforhttpresponses【发布时间】:2021-07-1013:37:49【问题描述】:我想为我目前正在处理的身份验证服务创建自定义错误。由于我必须为每个http响应创建一个错... 查看详情

单元测试时如何在nestjs中为服务提供注入常量

】单元测试时如何在nestjs中为服务提供注入常量【英文标题】:HowtoprovideInjectedconstanttoserviceinnestjswhenunittesting【发布时间】:2019-03-0101:30:56【问题描述】:我尝试为我的小型应用程序创建单元测试。我想测试一个使用注入配置和... 查看详情

如何在 Prism 中为我的对话窗口设置区域管理器?

】如何在Prism中为我的对话窗口设置区域管理器?【英文标题】:HowcanIsetregionManagerformydialogwindowinPrism?【发布时间】:2021-12-0804:27:30【问题描述】:我在不使用Shell的情况下编写我的应用程序。所以我使用IDialogService创建了自己的... 查看详情

如何将数据从后端测试用例发布到控制器

】如何将数据从后端测试用例发布到控制器【英文标题】:Howtopostdatainfromback-endtestcasetocontroller【发布时间】:2019-10-1611:22:04【问题描述】:我是php新手,我目前正在尝试为我编写的添加函数创建一个测试用例,用于在我的数据... 查看详情

如何在 Rails 应用程序中为我的用户添加角色?

】如何在Rails应用程序中为我的用户添加角色?【英文标题】:howtoaddrolestomyusersinrailsapp?【发布时间】:2015-11-1611:47:51【问题描述】:我有一个简单的应用程序,带有来自devise的身份验证系统。我尝试将角色添加到用户模型。但... 查看详情

如何在角度 9 中为多个 if else 语句编写测试用例

】如何在角度9中为多个ifelse语句编写测试用例【英文标题】:Howtowriteatestcaseformultipleifelsestatementinangular9【发布时间】:2021-08-1322:20:56【问题描述】:我正在尝试为以下方法编写测试用例,但我不知道如何编写测试用例来覆盖代... 查看详情

我如何在ionic4中为我的所有页面设置一个通用的页眉组件?(代码片段)

我想在所有离子页面(Ionic4)中将通用组件设置为标题。什么是正确的方法?答案在app.component.html上,您可以添加标题组件,如下所示:<app-header></app-header><main><router-outlet></router-outlet></main>另一答案创... 查看详情

我试图在 discord.js 中为我的机器人创建一个合作伙伴命令

...陌生,但我以前有一点经验,但我不知道这意味着什么或如何解决它。任何帮助将不胜感激:)Myscreenshotofthecodeandtheerror 查看详情

我正在尝试在 discord.js 中为我的机器人创建一个自动角色功能,但它不起作用

】我正在尝试在discord.js中为我的机器人创建一个自动角色功能,但它不起作用【英文标题】:I\'mtryingtomakeanautorolefunctionindiscord.jsformybotbutitdoesn\'twork【发布时间】:2020-10-2623:41:22【问题描述】:因此,我正在尝试根据我找到的教... 查看详情