返回顶部
首页 > 资讯 > 后端开发 > GO >使用 dockertest 进行 Golang SQL 单元测试的基本设置
  • 171
分享到

使用 dockertest 进行 Golang SQL 单元测试的基本设置

2024-02-06 09:02:09 171人浏览 独家记忆
摘要

问题内容 我正在使用 Dockertest 执行 sql 单元测试。这只是到 *sqlx.db 的简单连接,但在连接到数据库时,它以某种方式生成错误 error: eof 。我无法识别

问题内容

我正在使用 Dockertest 执行 sql 单元测试。这只是到 *sqlx.db 的简单连接,但在连接到数据库时,它以某种方式生成错误 error: eof 。我无法识别错误,我可能配置错误。

import (
    "fmt"
    "log"
    "os"
    "testing"
    
    _ "GitHub.com/lib/pq"
    "github.com/jmoiron/sqlx"
    "github.com/ory/dockertest/v3"
    "github.com/ory/dockertest/v3/docker"
)

var (
    host     = "localhost"
    user     = "postgres"
    passWord = "postgres"
    dbName   = "db_test"
    port     = "5437"
    dsn      = "host=%s port=%s user=%s password=%s dbname=%s sslmode=disable timezone=UTC connect_timeout=30"
)

var resource *dockertest.Resource
var pool *dockertest.Pool
var testDB *sqlx.DB
var testRepo Repo

func TestMain(m *testing.M) {
    // connect to docker; fail if docker not running
    p, err := dockertest.NewPool("")
    if err != nil {
        log.Fatalf("could not connect to docker; is it running? %s", err)
    }
    pool = p

    opts := dockertest.RunOptions{
        Repository: "postgres",
        Tag:        "14.5", // same as docker compose
        Env: []string{
            "POSTGRES_USER=" + user,
            "POSTGRES_PASSWORD=" + password,
            "POSTGRES_DB=" + dbName,
        },
        ExposedPorts: []string{"5432"},
        PortBindings: map[docker.Port][]docker.PortBinding{
            "5432": {
                {HostIP: "0.0.0.0", HostPort: port},
            },
        },
    }

    resource, err = pool.RunWithOptions(&opts)
    if err != nil {
        // _ = pool.Purge(resource)
        log.Fatalf("could not start resource: %s", err)
    }

    if err := pool.Retry(func() error {
        var err error
        testDB, err = sqlx.Connect("postgres", fmt.Sprintf(dsn, host, port, user, password, dbName))
        if err != nil {
            log.Println("Error:", err)
            return err
        }
        return testDB.Ping()
    }); err != nil {
        _ = pool.Purge(resource)
        log.Fatalf("could not connect to database: %s", err)
    }

    err = createTables()
    if err != nil {
        log.Fatalf("error creating tables: %s", err)
    }

    code := m.Run()

    if err := pool.Purge(resource); err != nil {
        log.Fatalf("could not purge resource: %s", err)
    }

    testRepo = &repo{db: testDB}

    os.Exit(code)
}

func createTables() error {
    tableSQL, err := os.ReadFile("./testdata/tables.sql")
    if err != nil {
        fmt.Println(err)
        return err
    }

    _, err = testDB.Exec(string(tableSQL))
    if err != nil {
        fmt.Println(err)
        return err
    }

    return nil
}

func Test_pingDB(t *testing.T) {
    err := testDB.Ping()
    if err != nil {
        t.Error("can't ping database")
    }
}


正确答案


pool.Retry 的默认最长等待时间为 一分钟一个>。只是猜测,也许您的 postgres 数据库容器不会在一分钟内启动。

尝试增加 MaxWait 时间,例如pool.MaxWait = 20 * 时间.Minute

以上就是使用 dockertest 进行 golang SQL 单元测试的基本设置的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 使用 dockertest 进行 Golang SQL 单元测试的基本设置

本文链接: https://lsjlt.com/news/561370.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用 dockertest 进行 Golang SQL 单元测试的基本设置
    问题内容 我正在使用 dockertest 执行 sql 单元测试。这只是到 *sqlx.db 的简单连接,但在连接到数据库时,它以某种方式生成错误 error: eof 。我无法识别...
    99+
    2024-02-06
  • 如何使用单元测试框架对 Golang 函数进行测试?
    go 中使用单元测试框架进行单元测试:导入 testing 包。编写以 test 为前缀的单元测试函数。使用断言函数(如 assertequal())验证测试结果。运行单元测试(go t...
    99+
    2024-04-16
    golang 单元测试 标准库
  • C#使用MSTest进行单元测试
    我之前写过一篇XUNit的简介:使用Xunit来进行单元测试。Xunit在当时确实是一个最简单易用的测试框架,然而,随着发展,Xunit也变得复杂了不少,光写一个最简单的测试就要导入...
    99+
    2024-04-02
  • Android中使用Junit进行单元测试
      不管我们在学习还是在开发的时候,都会用到测试,在Android中进行的Junit单元工具测试需要创建一个类去继承于AndroidTestCase类,同时还需要在主配置文...
    99+
    2022-06-06
    单元 junit 单元测试 测试 Android
  • 如何使用 PHP 进行单元测试?
    单元测试检查软件的最小构成部分(如函数、方法),php 可通过 phpunit 框架进行单元测试。首先安装 phpunit,然后创建测试类(扩展自 testcase),再编写以 "tes...
    99+
    2024-04-19
    php 单元测试 composer
  • 使用 Go 泛型进行单元测试
    使用 go 泛型进行单元测试,可以创建适用于多种类型的通用测试函数,提高测试代码的可重用性、可维护性和可读性。具体优势包括:可重用性:泛型测试函数适用于多种类型,减少重复代码。可维护性:...
    99+
    2024-05-03
    单元测试 泛型 代码可读性
  • .Net使用Xunit工具进行单元测试
    不管你爱与不爱,单元测试对于一个软件的长治久安还是必不可少的一环。在Visual Studio 2012后,VS中的测试浏览器也能与第三方的集成了,用起来还是非常方便的。目前在.Ne...
    99+
    2024-04-02
  • C#怎么使用MSTest进行单元测试
    今天小编给大家分享一下C#怎么使用MSTest进行单元测试的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。目前MS发布了两个版...
    99+
    2023-07-02
  • 使用Spring Boot进行单元测试详情
    目录前言使用 Spring Boot 进行测试系列文章依赖项不要在单元测试中使用Spring创建一个可测试的类实例属性注入是不好的提供一个构造函数减少模板代码使用Mockito来模拟...
    99+
    2024-04-02
  • 使用Junit对Android应用进行单元测试
      在本文中,你将会学习到如何在Eclipse中创建Android JUnit的单元测试工程以及在不同的条件下创建及运行自动测试用例。   准备工作   本文假设读...
    99+
    2022-06-06
    单元 junit 单元测试 测试 Android
  • Java使用Junit4.jar进行单元测试的方法
    目录一、下载依赖包二、添加到依赖三、设置 test 目录四、创建测试类五、开始测试一、下载依赖包 分别下载 junit.jar 以及 hamcrest-core.jar 二、添加到依...
    99+
    2024-04-02
  • Android中如何使用JUnit进行单元测试
      在我们日常开发android app的时候,需要不断地进行测试,所以使用JUnit测试框架显得格外重要,学会JUnit可以加快应用的开发周期。   Android中建...
    99+
    2022-06-06
    单元 junit 单元测试 测试 Android
  • ASP.NET Core项目使用xUnit进行单元测试
    目录一、前言二、创建示例项目1、UnitTest.Model2、UnitTest.Data3、UnitTest.IRepository4、UnitTest.Repository5、U...
    99+
    2024-04-02
  • 如何使用MockMvc进行controller层单元测试
    这篇文章主要介绍了如何使用MockMvc进行controller层单元测试,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。看代码吧~package com.ieou....
    99+
    2023-06-15
  • C++中怎么使用CppUnit进行单元测试
    这篇文章主要讲解了“C++中怎么使用CppUnit进行单元测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中怎么使用CppUnit进行单元测试”吧!如果使用VC6,那么直接用VC6打...
    99+
    2023-06-17
  • golang 对私有函数进行单元测试的实例
    在待测试的私有函数所在的包内,新建一个xx_test.go文件 书写方式如下: import ( "github.com/stretchr/testify/assert" "...
    99+
    2024-04-02
  • 教你用IDEA配置JUnit并进行单元测试
    目录一、JUnit是什么?二、IDEA的JUnit配置三、生成JUnit4测试用例一、JUnit 是什么? JUnit 是一个 Java 语言的回归测试框架(regression t...
    99+
    2024-04-02
  • .Net怎么使用Xunit工具进行单元测试
    本篇内容介绍了“.Net怎么使用Xunit工具进行单元测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!安装Xunit:Xunit的安装现在...
    99+
    2023-07-02
  • 如何使用 PHPUnit 进行 PHP 函数单元测试?
    要进行 php 函数单元测试,可以使用 phpunit,步骤如下:创建测试类文件,扩展 phpunit\framework\testcase。为要测试的函数编写以 "test" 开头的测...
    99+
    2024-04-17
    php 单元测试
  • 如何使用 Go 标准库进行单元测试
    go 标准库通过 testing 包提供了单元测试功能,只需创建 _test.go 文件并编写测试函数即可。测试函数使用断言函数,如 assertequal 和 asserttrue,比...
    99+
    2024-04-30
    单元测试 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作