Golang单元测试HTTP处理程序

鲍勃:

我想做一个简单的服务器,可以接收来自服务的Web挂钩请求并为我处理。出于乐趣,我想在Go中构建它,因为这听起来像是一种不错的语言,并且这是一个简单的项目。

服务器似乎工作正常,但是我无法通过单元测试工作。经检查,似乎每个URL都给出404。我在做什么错?

main.go

package main

import (
    "fmt"
    "log"
    "net/http"
)

func pingHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "{\"check\": \"online\"}")
}

func main() {
    // Start server
    log.Print("Starting server")
    http.HandleFunc("/ping", pingHandler)
    log.Fatal(http.ListenAndServe(":7080", nil))
}

main_test.go

package main

import (
    "fmt"
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestPingHandler(t *testing.T) {
    req, err := http.NewRequest("GET", "/ping", nil)
    if err != nil {
        t.Fatal(err)
    }
    rr := httptest.NewRecorder()
    http.DefaultServeMux.ServeHTTP(rr, req)

    status := rr.Code
    fmt.Println(status)
}
阿德里安:

您的处理程序已在中注册main,但main在运行单元测试时不会被调用。因此,当您尝试通过进行测试时DefaultMux,没有注册任何处理程序,并且得到404。但是,通常,您测试的是处理程序,而不是多路复用器。所以代替这行:

http.DefaultServeMux.ServeHTTP(rr, req)

您可以改为测试:

pingHandler(rr, req)

即使main未执行注册处理程序,该方法仍然有效,因为您现在正在直接测试处理程序。

您还应该httptest.NewRequest用来创建测试请求;http.NewRequest用于创建要在中使用的请求Client

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重置golang中的http处理程序以进行单元测试

单元测试golang处理程序

使用自定义ServeHTTP实现的HTTP处理程序的golang单元测试

单元测试通用处理程序

单元测试事件处理程序的代码

如何对Google App Engine Go HTTP处理程序进行单元测试?

Python:如何对自定义HTTP请求处理程序进行单元测试?

如何使用golang实施单元测试程序?

如何对委托处理程序进行单元测试

如何对Eclipse命令处理程序进行单元测试?

用于处理程序单元测试的模拟功能

MVVM:异步事件处理程序的单元测试

Golang中的单元测试

使用PanicsWithValue进行Golang单元测试

Golang结构中的单元测试

使用模板golang进行单元测试

Golang:替换功能单元测试

在单元测试中处理Laravel HttpException

Java:单元测试图像处理

处理单元测试中的MainThread执行

Golang:如何生成net / http超时错误以执行单元测试

如何在Golang中为HTTP请求编写单元测试?

Netty-使用IdleStateHandler对处理程序的空闲状态进行单元测试

如何使用Power Mock对Spring Boot Rest Controller和异常处理程序进行单元测试

Spring-Webflux:处理程序功能单元测试抛出UnsupportedMediaTypeStatusException

如何在vert.x Java中对处理程序进行单元测试?

JavaScript事件处理程序是否应该进行单元测试

如何在C#中以CQRS模式对命令处理程序进行单元测试

React Testing:React Shallow Rendering单元测试中的事件处理程序