小编tes*_*495的帖子

使用构建标记调用同一包中的函数和变量但不同的文件

我正在设置一些集成测试,我正在一个单独的测试包中进行我的 src 代码。这样做是为了防止循环依赖。单元测试不存储在这里,它们与它们正在测试的文件一起存储。

我的 golang 项目层次结构如下所示:

cmd public ... testing/ main_test.go database_test.go

在 main_test.go 中,我计划初始化与外部依赖项的连接,例如我的测试数据库。

package tests

type Database struct {
...
}
var DB Database

func TestMain(m *testing.M){
 SetUpDatabase()
 exitCode := m.Run()
 os.Exit(exitCode)
}
Run Code Online (Sandbox Code Playgroud)

database_integration_test.go

func Test(t *testing.T) {

    tests := []struct {
        title string
        run   func(t *testing.T)
    }{
        {"should make query", testQuery},

    }
    for _, test := range tests {
        t.Run(test.title, func(t *testing.T) {
            test.run(t)
        })
    }
}

func testQuery(t *testing.T) {

    var r result.Result
    err := DB.database.DoQuery("").Decode(&r) …
Run Code Online (Sandbox Code Playgroud)

integration-testing build go

3
推荐指数
1
解决办法
72
查看次数

使用接口来使用不同包中的方法

我试图了解接口的使用方式。下面是一个人为的例子来证明我的问题。我有主包,它实例化一个测试数据库,然后将其传递到测试服务器,然后在其中初始化服务器。

然后调用服务器,执行虚拟数据库插入(使用虚拟数据库依赖项,在服务器初始化时传递)。

主程序

package main

import (
    "interfaces/database"
    "interfaces/server"
)


func main() {
    db := database.Start()
    s := server.Start(db)
    s.HandleInsert()
}
Run Code Online (Sandbox Code Playgroud)

数据库.go

package database

import "fmt"

type Database struct {
    pool string
}

func Start() *Database{
    database := &Database{}
    database.pool = "examplepool"
    return database
}

func(db *Database) Select() {
    fmt.Println("Running a Select")
}

func(db *Database) Insert() {
    fmt.Println("Running an Insert")
}

func (db *Database) Delete() {
    fmt.Println("Running a Delete")
}
Run Code Online (Sandbox Code Playgroud)

服务器.go

package server

import "fmt"

type Database interface {
    Select() …
Run Code Online (Sandbox Code Playgroud)

interface go

2
推荐指数
1
解决办法
900
查看次数

标签 统计

go ×2

build ×1

integration-testing ×1

interface ×1