在golang中为ws创建单元测试

2024-01-02

我使用 gorilla Web 套接字框架并使用以下客户端在本地运行 Web 套接字并进行调试

https://github.com/gorilla/websocket https://github.com/gorilla/websocket

ws = new WebSocket("ws://localhost:8080/mypath")
ws.onmessage = function(ev) { console.log(ev.data) }
ws.send("hello")

当我在 chrome 控制台中使用它时,这是有效的,但我的问题是否有办法在 go 中进行一些单元测试并避免使用 chrome 控制台?


创建一个测试服务器 https://godoc.org/net/http/httptest#Server使用网/http/httptest https://godoc.org/net/http/httptest包裹。使用 Gorilla 客户端连接到该服务器。读取和写入消息以测试连接。

package main

import (
    "net/http"
    "net/http/httptest"
    "strings"
    "testing"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{}

func echo(w http.ResponseWriter, r *http.Request) {
    c, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        return
    }
    defer c.Close()
    for {
        mt, message, err := c.ReadMessage()
        if err != nil {
            break
        }
        err = c.WriteMessage(mt, message)
        if err != nil {
            break
        }
    }
}

func TestExample(t *testing.T) {
    // Create test server with the echo handler.
    s := httptest.NewServer(http.HandlerFunc(echo))
    defer s.Close()

    // Convert http://127.0.0.1 to ws://127.0.0.
    u := "ws" + strings.TrimPrefix(s.URL, "http")

    // Connect to the server
    ws, _, err := websocket.DefaultDialer.Dial(u, nil)
    if err != nil {
        t.Fatalf("%v", err)
    }
    defer ws.Close()

    // Send message to server, read response and check to see if it's what we expect.
    for i := 0; i < 10; i++ {
        if err := ws.WriteMessage(websocket.TextMessage, []byte("hello")); err != nil {
            t.Fatalf("%v", err)
        }
        _, p, err := ws.ReadMessage()
        if err != nil {
            t.Fatalf("%v", err)
        }
        if string(p) != "hello" {
            t.Fatalf("bad message")
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在golang中为ws创建单元测试 的相关文章

随机推荐

  • Node.js 和单页 Web 应用程序

    我正在寻找后端的express js 和客户端的JS 我的应用程序是单页 Web 应用程序 服务器仅提供 JSON 消息 我的问题是关于 Express 的 路由 是否应该使用路由来连接 UI 和服务器端业务逻辑 这将如何与我的单页应用程序
  • 将一维 Numpy 数组作为行添加到 DataFrame

    是否有一个函数可以让您有效地将 NumPy 数组直接附加到 DataFrame 中 变量 df pd DataFrame columns col1 col2 col3 Out 1 Col1 Col2 Col3 arr np empty 3
  • 如何在 NS3 中使用 Tcp 变体比较?

    我需要在课堂项目中使用 ns 3 来比较不同类型的 TCP 我是 ns 3 的新手 我不想实施新代码 简而言之 我有两个问题 哪个 ns 3 示例最适合我的目的 Tcp 变体 Comparison cc 我怎样才能看到输出 我运行了代码 但
  • Angular 路由器防护和 ROUTER_NAVIGATION 效果顺序

    有一个简单的 Angular 4 路由防护 它等待从后端加载一些数据 Injectable export class ContractsLoadedGuard implements CanActivate constructor priva
  • RSI 与 Wilder 的 RSI 计算问题

    我无法获得平滑的 RSI 下图来自 freestockcharts com 计算使用此代码 public static double CalculateRsi IEnumerable
  • 在 javascript 中调用 php 函数

    我不知道如何在我的问题中使用ajax 我在 php 分配 中有一个函数可以更新数据库中的临时表 我想当用户单击按钮 在 javascript 中定义的反馈函数 时运行该函数 分配 我该怎么办
  • 未处理的异常:MissingPluginException(在通道 Awesome_notifications 上找不到方法初始化的实现)

    我已经在 main dart 中初始化了 Awesome notifications 插件当我热重启时 在调试控制台中我收到此错误 E flutter 4447 ERROR flutter lib ui ui dart state cc 1
  • 如何将 Promise 绑定到组件属性?

    我有一个 Promise 对象需要解析到另一个组件 如何实现这一点 以便当 Promise 时component one解决后 promise 对象被解析为component two还可以解决吗 组件一摘录 Component select
  • 通过 SSH 隧道进行 MySQL 复制

    我在通过以下方式设置复制时遇到问题SSH尽管花了很多时间阅读官方文档 文章和 SO 问题 但我仍然在隧道中 我的主人是192 168 0 105奴隶是192 168 0 104 我已经通过以下方式设置了 SSH 隧道 ssh L 3305
  • 在构造函数*内部*分配原型方法 - 为什么不呢?

    从风格上来说 我更喜欢这种结构 var Filter function category value this category category this value value product is a JSON object Filt
  • 备份(或者同步)开发机器的好方法是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我广泛使用源代码控制来处理与我正在从事的项目相关的任何内容 源代码 文档等 并且我从未以这种方式丢失过任何东西 然而 我的开发机器上发生过两三次崩溃
  • React 应用程序返回 500 内部服务器错误

    我有一个使用 create react app 创建的 React 应用程序 我跑完之后npm run build 并将应用程序部署为静态站点 一切正常 除了当我在索引以外的路线上刷新页面时 它会失败并显示500 internal serv
  • MySQL 整数索引与日期时间索引

    首先我要说的是 我已经看过许多类似的问题 但所有这些问题都与Timestamp and DateTime没有索引的字段类型 至少这是我的理解 众所周知 DateTime 有一定的优势 将它们放在一边一分钟 假设桌子的引擎是InnoDB wi
  • 如何同时在同一窗口中显示和更新两个 matplotlib 图?

    我实现了一个 GUI 它显示两个下拉菜单 您可以在其中选择要显示的两组不同的图表 但是 当我使用以下代码创建图表时 import matplotlib pyplot as plt from matplotlib backends backe
  • 空指针访问:变量在此位置只能为空

    for int i 0 i
  • 如何使用 pprint 格式化多行地图?

    pprint的文档有点像砖墙 如果你打印一张地图 它会打印成一行 如下所示 a b b c d e 相反 我希望像这样打印 可以选择使用逗号 a b b c d e 如何使用 pprint 来做到这一点 您可以设置 print right
  • wamp 服务器错误 #2002 无法打开 phpMyAdmin [重复]

    这个问题在这里已经有答案了 我已经安装了瓦普服务器我工作得很好 但现在我尝试打开php我的管理员但服务器显示此错误 错误 MySQL 说 文档 2002 无法建立连接 因为目标计算机主动拒绝连接 服务器没有响应 或者本地服务器的套接字配置不
  • 如何解决Flutter下拉按钮溢出问题?

    我创建了一个 Flutter 表单 并使用 flutter 构建了一个下拉按钮 我正在将本地儿子数据丢失到下拉列表中 我的下拉按钮中的一些项目很长 我使用 SafeArea 和 ListView 但右侧出现溢出 其他问题中未提及的部分解决方
  • 统计tableau中某列出现Null的次数

    我对 Tableau 比较陌生 我想知道是否有一种方法可以计算列中的空值 我有一个名为字符串类型的电子邮件的列 想知道有多少人尚未输入他们的电子邮件 即空 我尝试创建一个计算字段 计数 ISNULL 电子邮件 但这给了我总计数而不是空值计数
  • 在golang中为ws创建单元测试

    我使用 gorilla Web 套接字框架并使用以下客户端在本地运行 Web 套接字并进行调试 https github com gorilla websocket https github com gorilla websocket ws