猿问

使用内部函数进行戈朗 http 处理程序测试

我想为我的http处理程序构建一个测试部分,我想使用http处理程序函数,但我想有单独的函数来模拟处理的数据库部分。我想到的是这样的:


package main


import (

    "log"

    "testing"

)


// DB functions

type UserDBFunctions interface {

    InsertUser() string

}


type UserDB struct {

}


func (u UserDB) InsertUser() string {

    return "hello"

}


// http handler functions

type UserHandlerFunctions interface {

    Register() string

}


type UserHandler struct {

    userDb *UserDB

}


func newUserHandler() UserHandler {

    return UserHandler{userDb: new(UserDB)}

}


func (u UserHandler) Register() string {

    str := u.userDb.InsertUser()

    return str + " world"

}


func main() {

    var i UserHandlerFunctions = newUserHandler()

    str :=  i.Register()

    log.Println(str)

}


// test functions

type FakeUserDBFunctions interface {

    InsertUser() string

}


type FakeUserDB struct {

}


func (u FakeUserDB) InsertUser() string {

    return "bye"

}


func newFakeUserHandler() UserHandler {

    return UserHandler{userDb: *UserDB(&FakeUserDB{})}

}


func TestRegisterUser(t *testing.T) {

    t.Run("register user", func(t *testing.T) {

        var i UserHandlerFunctions = newFakeUserHandler()

        str := i.Register()

        log.Println(str)

    })

}

因此,第一个接口是针对真正的数据库函数的,然后是调用数据库函数的http处理程序,在main()函数下面应该有带有数据库函数模型的测试。但这部分不起作用。如何将新用户处理程序中的真实界面替换为模型。



慕容森
浏览 116回答 1
1回答

跃然一笑

用户处理者应使用用户数据库功能而不是用户数据库。type UserHandler struct {     userDb UserDBFunctions }这是修改后的一个 https://play.golang.org/p/nLiaomKA2NH
随时随地看视频慕课网APP

相关分类

Go
我要回答